π rns.kin.earth git π
Commit f62d9946ac612fffe7e239a6d6d0bbb90ffa9b96
Parents : 893a463
Author : Mark Qvist <mark@unsigned.io>
Date : 2022-09-30T18:43:04+02:00
Updated documentation and manual
Changes
45 files changed, 5444 insertions(+), 2300 deletions(-)
Diff
diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf
index 9d2fc0d7..925cf765 100644
Binary files a/docs/Reticulum Manual.pdf and b/docs/Reticulum Manual.pdf differ
diff --git a/docs/manual/.buildinfo b/docs/manual/.buildinfo
index 8f29c243..8f7c2fc5 100644
--- a/docs/manual/.buildinfo
+++ b/docs/manual/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: ac2d5f73ab011289e2f4e2a564ac4cac
+config: 08677a3d0e0fa273687289188ec1a603
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/manual/_sources/index.rst.txt b/docs/manual/_sources/index.rst.txt
index d61a548b..6ce79e25 100644
--- a/docs/manual/_sources/index.rst.txt
+++ b/docs/manual/_sources/index.rst.txt
@@ -5,6 +5,11 @@ This manual aims to provide you with all the information you need to
understand Reticulum, build networks or develop programs using it, or
to participate in the development of Reticulum itself.
+.. only:: html
+
+ Table Of Contents
+ =================
+
.. toctree::
:maxdepth: 3
@@ -16,9 +21,13 @@ to participate in the development of Reticulum itself.
interfaces
networks
examples
- reference
support
+.. toctree::
+ :maxdepth: 2
+
+ reference
+
.. only:: html
diff --git a/docs/manual/_sources/reference.rst.txt b/docs/manual/_sources/reference.rst.txt
index 27e6eff2..017cf8d2 100644
--- a/docs/manual/_sources/reference.rst.txt
+++ b/docs/manual/_sources/reference.rst.txt
@@ -5,11 +5,8 @@
*************
API Reference
*************
-This chapter lists and explains all classes exposed by the Reticulum Network Stack API, along with their methods and usage. It can be used as a reference while writing applications that utilise Reticulum, or read in entirity to gain an understanding of the complete functionality of RNS from a developers perspective.
-
-Classes
-=========================
-Communication over a Reticulum network is achieved using a set of classes exposed by the RNS API.
+Communication over Reticulum networks is achieved by using a simple set of classes exposed by the RNS API.
+This chapter lists and explains all classes exposed by the Reticulum Network Stack API, along with their method signatures and usage. It can be used as a reference while writing applications that utilise Reticulum, or it can be read in entirity to gain an understanding of the complete functionality of RNS from a developers perspective.
.. _api-reticulum:
diff --git a/docs/manual/_static/basic.css b/docs/manual/_static/basic.css
index 4e9a9f1f..eeb0519a 100644
--- a/docs/manual/_static/basic.css
+++ b/docs/manual/_static/basic.css
@@ -236,6 +236,16 @@ div.body p, div.body dd, div.body li, div.body blockquote {
a.headerlink {
visibility: hidden;
}
+a.brackets:before,
+span.brackets > a:before{
+ content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+ content: "]";
+}
+
h1:hover > a.headerlink,
h2:hover > a.headerlink,
@@ -324,15 +334,11 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
-nav.contents,
-aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
-nav.contents,
-aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -371,8 +377,6 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
-nav.contents > :last-child,
-aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -380,8 +384,6 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
-nav.contents::after,
-aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -606,26 +608,19 @@ ol.simple p,
ul.simple p {
margin-bottom: 0;
}
-aside.footnote > span,
-div.citation > span {
+dl.footnote > dt,
+dl.citation > dt {
float: left;
+ margin-right: 0.5em;
}
-aside.footnote > span:last-of-type,
-div.citation > span:last-of-type {
- padding-right: 0.5em;
-}
-aside.footnote > p {
- margin-left: 2em;
-}
-div.citation > p {
- margin-left: 4em;
-}
-aside.footnote > p:last-of-type,
-div.citation > p:last-of-type {
+
+dl.footnote > dd,
+dl.citation > dd {
margin-bottom: 0em;
}
-aside.footnote > p:last-of-type:after,
-div.citation > p:last-of-type:after {
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
content: "";
clear: both;
}
@@ -641,6 +636,10 @@ dl.field-list > dt {
padding-left: 0.5em;
padding-right: 5px;
}
+dl.field-list > dt:after {
+ content: ":";
+}
+
dl.field-list > dd {
padding-left: 0.5em;
diff --git a/docs/manual/_static/check-solid.svg b/docs/manual/_static/check-solid.svg
new file mode 100644
index 00000000..92fad4b5
--- /dev/null
+++ b/docs/manual/_static/check-solid.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#22863a" fill="none" stroke-linecap="round" stroke-linejoin="round">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <path d="M5 12l5 5l10 -10" />
+</svg>
diff --git a/docs/manual/_static/classic.css b/docs/manual/_static/classic.css
deleted file mode 100644
index 92cac9f0..00000000
--- a/docs/manual/_static/classic.css
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * classic.css_t
- * ~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- classic theme.
- *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-html {
- /* CSS hack for macOS's scrollbar (see #1125) */
- background-color: #FFFFFF;
-}
-
-body {
- font-family: sans-serif;
- font-size: 100%;
- background-color: #11303d;
- color: #000;
- margin: 0;
- padding: 0;
-}
-
-div.document {
- display: flex;
- background-color: #1c4e63;
-}
-
-div.documentwrapper {
- float: left;
- width: 100%;
-}
-
-div.bodywrapper {
- margin: 0 0 0 230px;
-}
-
-div.body {
- background-color: #ffffff;
- color: #000000;
- padding: 0 20px 30px 20px;
-}
-
-div.footer {
- color: #ffffff;
- width: 100%;
- padding: 9px 0 9px 0;
- text-align: center;
- font-size: 75%;
-}
-
-div.footer a {
- color: #ffffff;
- text-decoration: underline;
-}
-
-div.related {
- background-color: #133f52;
- line-height: 30px;
- color: #ffffff;
-}
-
-div.related a {
- color: #ffffff;
-}
-
-div.sphinxsidebar {
-}
-
-div.sphinxsidebar h3 {
- font-family: 'Trebuchet MS', sans-serif;
- color: #ffffff;
- font-size: 1.4em;
- font-weight: normal;
- margin: 0;
- padding: 0;
-}
-
-div.sphinxsidebar h3 a {
- color: #ffffff;
-}
-
-div.sphinxsidebar h4 {
- font-family: 'Trebuchet MS', sans-serif;
- color: #ffffff;
- font-size: 1.3em;
- font-weight: normal;
- margin: 5px 0 0 0;
- padding: 0;
-}
-
-div.sphinxsidebar p {
- color: #ffffff;
-}
-
-div.sphinxsidebar p.topless {
- margin: 5px 10px 10px 10px;
-}
-
-div.sphinxsidebar ul {
- margin: 10px;
- padding: 0;
- color: #ffffff;
-}
-
-div.sphinxsidebar a {
- color: #98dbcc;
-}
-
-div.sphinxsidebar input {
- border: 1px solid #98dbcc;
- font-family: sans-serif;
- font-size: 1em;
-}
-
-
-
-/* -- hyperlink styles ------------------------------------------------------ */
-
-a {
- color: #355f7c;
- text-decoration: none;
-}
-
-a:visited {
- color: #355f7c;
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-
-
-/* -- body styles ----------------------------------------------------------- */
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
- font-family: 'Trebuchet MS', sans-serif;
- background-color: #f2f2f2;
- font-weight: normal;
- color: #20435c;
- border-bottom: 1px solid #ccc;
- margin: 20px -20px 10px -20px;
- padding: 3px 0 3px 10px;
-}
-
-div.body h1 { margin-top: 0; font-size: 200%; }
-div.body h2 { font-size: 160%; }
-div.body h3 { font-size: 140%; }
-div.body h4 { font-size: 120%; }
-div.body h5 { font-size: 110%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
- color: #c60f0f;
- font-size: 0.8em;
- padding: 0 4px 0 4px;
- text-decoration: none;
-}
-
-a.headerlink:hover {
- background-color: #c60f0f;
- color: white;
-}
-
-div.body p, div.body dd, div.body li, div.body blockquote {
- text-align: justify;
- line-height: 130%;
-}
-
-div.admonition p.admonition-title + p {
- display: inline;
-}
-
-div.admonition p {
- margin-bottom: 5px;
-}
-
-div.admonition pre {
- margin-bottom: 5px;
-}
-
-div.admonition ul, div.admonition ol {
- margin-bottom: 5px;
-}
-
-div.note {
- background-color: #eee;
- border: 1px solid #ccc;
-}
-
-div.seealso {
- background-color: #ffc;
- border: 1px solid #ff6;
-}
-nav.contents,
-aside.topic,
-
-div.topic {
- background-color: #eee;
-}
-
-div.warning {
- background-color: #ffe4e4;
- border: 1px solid #f66;
-}
-
-p.admonition-title {
- display: inline;
-}
-
-p.admonition-title:after {
- content: ":";
-}
-
-pre {
- padding: 5px;
- background-color: unset;
- color: unset;
- line-height: 120%;
- border: 1px solid #ac9;
- border-left: none;
- border-right: none;
-}
-
-code {
- background-color: #ecf0f3;
- padding: 0 1px 0 1px;
- font-size: 0.95em;
-}
-
-th, dl.field-list > dt {
- background-color: #ede;
-}
-
-.warning code {
- background: #efc2c2;
-}
-
-.note code {
- background: #d6d6d6;
-}
-
-.viewcode-back {
- font-family: sans-serif;
-}
-
-div.viewcode-block:target {
- background-color: #f4debf;
- border-top: 1px solid #ac9;
- border-bottom: 1px solid #ac9;
-}
-
-div.code-block-caption {
- color: #efefef;
- background-color: #1c4e63;
-}
\ No newline at end of file
diff --git a/docs/manual/_static/clipboard.min.js b/docs/manual/_static/clipboard.min.js
new file mode 100644
index 00000000..54b3c463
--- /dev/null
+++ b/docs/manual/_static/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v2.0.8
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT Β© Zeno Rocha
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{container:document.body},i="";return"string"==typeof t?(e=t,n="rtl"===document.documentElement.getAttribute("dir"),(o=document.createElement("textarea")).style.fontSize="12pt",o.style.border="0",o.style.padding="0",o.style.margin="0",o.style.position="absolute",o.style[n?"right":"left"]="-9999px",n=window.pageYOffset||document.documentElement.scrollTop,o.style.top="".concat(n,"px"),o.setAttribute("readonly",""),o.value=e,o=o,r.container.appendChild(o),i=c()(o),a("copy"),o.remove()):(i=c()(t),a("copy")),i};function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var s=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},e=t.action,n=void 0===e?"copy":e,o=t.container,e=t.target,t=t.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==e){if(!e||"object"!==r(e)||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return t?l(t,{container:o}):e?"cut"===n?f(e):l(e,{container:o}):void 0};function d(t){return(d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function p(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function y(t,e){return(y=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(n){var o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}();return function(){var t,e=m(n);return t=o?(t=m(this).constructor,Reflect.construct(e,arguments,t)):e.apply(this,arguments),e=this,!(t=t)||"object"!==d(t)&&"function"!=typeof t?function(t){if(void 0!==t)return t;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e):t}}function m(t){return(m=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function v(t,e){t="data-clipboard-".concat(t);if(e.hasAttribute(t))return e.getAttribute(t)}var o=function(){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&y(t,e)}(r,i());var t,e,n,o=h(r);function r(t,e){var n;return function(t){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this),(n=o.call(this)).resolveOptions(e),n.listenClick(t),n}return t=r,n=[{key:"copy",value:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{container:document.body};return l(t,e)}},{key:"cut",value:function(t){return f(t)}},{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof t?[t]:t,e=!!document.queryCommandSupported;return t.forEach(function(t){e=e&&!!document.queryCommandSupported(t)}),e}}],(e=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=u()(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget,t=s({action:this.action(e),container:this.container,target:this.target(e),text:this.text(e)});this.emit(t?"success":"error",{action:this.action,text:t,trigger:e,clearSelection:function(){e&&e.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(t){return v("action",t)}},{key:"defaultTarget",value:function(t){t=v("target",t);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(t){return v("text",t)}},{key:"destroy",value:function(){this.listener.destroy()}}])&&p(t.prototype,e),n&&p(t,n),r}()},828:function(t){var e;"undefined"==typeof Element||Element.prototype.matches||((e=Element.prototype).matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector),t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},438:function(t,e,n){var u=n(828);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=u(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},879:function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var f=n(879),l=n(438);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!f.string(e))throw new TypeError("Second argument must be a String");if(!f.fn(n))throw new TypeError("Third argument must be a Function");if(f.node(t))return c=e,a=n,(u=t).addEventListener(c,a),{destroy:function(){u.removeEventListener(c,a)}};if(f.nodeList(t))return o=t,r=e,i=n,Array.prototype.forEach.call(o,function(t){t.addEventListener(r,i)}),{destroy:function(){Array.prototype.forEach.call(o,function(t){t.removeEventListener(r,i)})}};if(f.string(t))return t=t,e=e,n=n,l(document.body,t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,u,c,a}},817:function(t){t.exports=function(t){var e,n="SELECT"===t.nodeName?(t.focus(),t.value):"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName?((e=t.hasAttribute("readonly"))||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),e||t.removeAttribute("readonly"),t.value):(t.hasAttribute("contenteditable")&&t.focus(),n=window.getSelection(),(e=document.createRange()).selectNodeContents(t),n.removeAllRanges(),n.addRange(e),n.toString());return n}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,u=o.length;i<u;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=e,t.exports.TinyEmitter=e}},r={},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o(686).default;function o(t){if(r[t])return r[t].exports;var e=r[t]={exports:{}};return n[t](e,e.exports,o),e.exports}var n,r});
\ No newline at end of file
diff --git a/docs/manual/_static/copy-button.svg b/docs/manual/_static/copy-button.svg
new file mode 100644
index 00000000..9c074dae
--- /dev/null
+++ b/docs/manual/_static/copy-button.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <rect x="8" y="8" width="12" height="12" rx="2" />
+ <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2" />
+</svg>
diff --git a/docs/manual/_static/copybutton.css b/docs/manual/_static/copybutton.css
new file mode 100644
index 00000000..40eafe5f
--- /dev/null
+++ b/docs/manual/_static/copybutton.css
@@ -0,0 +1,93 @@
+/* Copy buttons */
+button.copybtn {
+ position: absolute;
+ display: flex;
+ top: .3em;
+ right: .3em;
+ width: 1.7em;
+ height: 1.7em;
+ opacity: 0;
+ transition: opacity 0.3s, border .3s, background-color .3s;
+ user-select: none;
+ padding: 0;
+ border: none;
+ outline: none;
+ border-radius: 0.4em;
+ /* The colors that GitHub uses */
+ border: #1b1f2426 1px solid;
+ background-color: #f6f8fa;
+ color: #57606a;
+}
+
+button.copybtn.success {
+ border-color: #22863a;
+ color: #22863a;
+}
+
+button.copybtn svg {
+ stroke: currentColor;
+ width: 1.5em;
+ height: 1.5em;
+ padding: 0.1em;
+}
+
+div.highlight {
+ position: relative;
+}
+
+.highlight:hover button.copybtn {
+ opacity: 1;
+}
+
+.highlight button.copybtn:hover {
+ background-color: rgb(235, 235, 235);
+}
+
+.highlight button.copybtn:active {
+ background-color: rgb(187, 187, 187);
+}
+
+/**
+ * A minimal CSS-only tooltip copied from:
+ * https://codepen.io/mildrenben/pen/rVBrpK
+ *
+ * To use, write HTML like the following:
+ *
+ * <p class="o-tooltip--left" data-tooltip="Hey">Short</p>
+ */
+ .o-tooltip--left {
+ position: relative;
+ }
+
+ .o-tooltip--left:after {
+ opacity: 0;
+ visibility: hidden;
+ position: absolute;
+ content: attr(data-tooltip);
+ padding: .2em;
+ font-size: .8em;
+ left: -.2em;
+ background: grey;
+ color: white;
+ white-space: nowrap;
+ z-index: 2;
+ border-radius: 2px;
+ transform: translateX(-102%) translateY(0);
+ transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+}
+
+.o-tooltip--left:hover:after {
+ display: block;
+ opacity: 1;
+ visibility: visible;
+ transform: translateX(-100%) translateY(0);
+ transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ transition-delay: .5s;
+}
+
+/* By default the copy button shouldn't show up when printing a page */
+@media print {
+ button.copybtn {
+ display: none;
+ }
+}
diff --git a/docs/manual/_static/copybutton.js b/docs/manual/_static/copybutton.js
new file mode 100644
index 00000000..40ac3310
--- /dev/null
+++ b/docs/manual/_static/copybutton.js
@@ -0,0 +1,220 @@
+// Localization support
+const messages = {
+ 'en': {
+ 'copy': 'Copy',
+ 'copy_to_clipboard': 'Copy to clipboard',
+ 'copy_success': 'Copied!',
+ 'copy_failure': 'Failed to copy',
+ },
+ 'es' : {
+ 'copy': 'Copiar',
+ 'copy_to_clipboard': 'Copiar al portapapeles',
+ 'copy_success': 'Β‘Copiado!',
+ 'copy_failure': 'Error al copiar',
+ },
+ 'de' : {
+ 'copy': 'Kopieren',
+ 'copy_to_clipboard': 'In die Zwischenablage kopieren',
+ 'copy_success': 'Kopiert!',
+ 'copy_failure': 'Fehler beim Kopieren',
+ },
+ 'fr' : {
+ 'copy': 'Copier',
+ 'copy_to_clipboard': 'CopiΓ© dans le presse-papier',
+ 'copy_success': 'CopiΓ© !',
+ 'copy_failure': 'Γchec de la copie',
+ },
+ 'ru': {
+ 'copy': 'Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ',
+ 'copy_to_clipboard': 'Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² Π±ΡΡΠ΅Ρ',
+ 'copy_success': 'Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΎ!',
+ 'copy_failure': 'ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ',
+ },
+ 'zh-CN': {
+ 'copy': 'ε€εΆ',
+ 'copy_to_clipboard': 'ε€εΆε°εͺθ΄΄ζΏ',
+ 'copy_success': 'ε€εΆζε!',
+ 'copy_failure': 'ε€εΆε€±θ΄₯',
+ },
+ 'it' : {
+ 'copy': 'Copiare',
+ 'copy_to_clipboard': 'Copiato negli appunti',
+ 'copy_success': 'Copiato!',
+ 'copy_failure': 'Errore durante la copia',
+ }
+}
+
+let locale = 'en'
+if( document.documentElement.lang !== undefined
+ && messages[document.documentElement.lang] !== undefined ) {
+ locale = document.documentElement.lang
+}
+
+let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT;
+if (doc_url_root == '#') {
+ doc_url_root = '';
+}
+
+/**
+ * SVG files for our copy buttons
+ */
+let iconCheck = `<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#22863a" fill="none" stroke-linecap="round" stroke-linejoin="round">
+ <title>${messages[locale]['copy_success']}</title>
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <path d="M5 12l5 5l10 -10" />
+</svg>`
+
+// If the user specified their own SVG use that, otherwise use the default
+let iconCopy = ``;
+if (!iconCopy) {
+ iconCopy = `<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
+ <title>${messages[locale]['copy_to_clipboard']}</title>
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <rect x="8" y="8" width="12" height="12" rx="2" />
+ <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2" />
+</svg>`
+}
+
+/**
+ * Set up copy/paste for code blocks
+ */
+
+const runWhenDOMLoaded = cb => {
+ if (document.readyState != 'loading') {
+ cb()
+ } else if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', cb)
+ } else {
+ document.attachEvent('onreadystatechange', function() {
+ if (document.readyState == 'complete') cb()
+ })
+ }
+}
+
+const codeCellId = index => `codecell${index}`
+
+// Clears selected text since ClipboardJS will select the text when copying
+const clearSelection = () => {
+ if (window.getSelection) {
+ window.getSelection().removeAllRanges()
+ } else if (document.selection) {
+ document.selection.empty()
+ }
+}
+
+// Changes tooltip text for two seconds, then changes it back
+const temporarilyChangeTooltip = (el, oldText, newText) => {
+ el.setAttribute('data-tooltip', newText)
+ el.classList.add('success')
+ setTimeout(() => el.setAttribute('data-tooltip', oldText), 2000)
+ setTimeout(() => el.classList.remove('success'), 2000)
+}
+
+// Changes the copy button icon for two seconds, then changes it back
+const temporarilyChangeIcon = (el) => {
+ el.innerHTML = iconCheck;
+ setTimeout(() => {el.innerHTML = iconCopy}, 2000)
+}
+
+const addCopyButtonToCodeCells = () => {
+ // If ClipboardJS hasn't loaded, wait a bit and try again. This
+ // happens because we load ClipboardJS asynchronously.
+ if (window.ClipboardJS === undefined) {
+ setTimeout(addCopyButtonToCodeCells, 250)
+ return
+ }
+
+ // Add copybuttons to all of our code cells
+ const codeCells = document.querySelectorAll('div.highlight pre')
+ codeCells.forEach((codeCell, index) => {
+ const id = codeCellId(index)
+ codeCell.setAttribute('id', id)
+
+ const clipboardButton = id =>
+ `<button class="copybtn o-tooltip--left" data-tooltip="${messages[locale]['copy']}" data-clipboard-target="#${id}">
+ ${iconCopy}
+ </button>`
+ codeCell.insertAdjacentHTML('afterend', clipboardButton(id))
+ })
+
+function escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+// Callback when a copy button is clicked. Will be passed the node that was clicked
+// should then grab the text and replace pieces of text that shouldn't be used in output
+function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
+
+ var regexp;
+ var match;
+
+ // Do we check for line continuation characters and "HERE-documents"?
+ var useLineCont = !!lineContinuationChar
+ var useHereDoc = !!hereDocDelim
+
+ // create regexp to capture prompt and remaining line
+ if (isRegexp) {
+ regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
+ } else {
+ regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
+ }
+
+ const outputLines = [];
+ var promptFound = false;
+ var gotLineCont = false;
+ var gotHereDoc = false;
+ const lineGotPrompt = [];
+ for (const line of textContent.split('\n')) {
+ match = line.match(regexp)
+ if (match || gotLineCont || gotHereDoc) {
+ promptFound = regexp.test(line)
+ lineGotPrompt.push(promptFound)
+ if (removePrompts && promptFound) {
+ outputLines.push(match[2])
+ } else {
+ outputLines.push(line)
+ }
+ gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
+ if (line.includes(hereDocDelim) & useHereDoc)
+ gotHereDoc = !gotHereDoc
+ } else if (!onlyCopyPromptLines) {
+ outputLines.push(line)
+ } else if (copyEmptyLines && line.trim() === '') {
+ outputLines.push(line)
+ }
+ }
+
+ // If no lines with the prompt were found then just use original lines
+ if (lineGotPrompt.some(v => v === true)) {
+ textContent = outputLines.join('\n');
+ }
+
+ // Remove a trailing newline to avoid auto-running when pasting
+ if (textContent.endsWith("\n")) {
+ textContent = textContent.slice(0, -1)
+ }
+ return textContent
+}
+
+
+var copyTargetText = (trigger) => {
+ var target = document.querySelector(trigger.attributes['data-clipboard-target'].value);
+ return formatCopyText(target.innerText, '', false, true, true, true, '', '')
+}
+
+ // Initialize with a callback so we can modify the text before copy
+ const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText})
+
+ // Update UI with error/success messages
+ clipboard.on('success', event => {
+ clearSelection()
+ temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success'])
+ temporarilyChangeIcon(event.trigger)
+ })
+
+ clipboard.on('error', event => {
+ temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure'])
+ })
+}
+
+runWhenDOMLoaded(addCopyButtonToCodeCells)
\ No newline at end of file
diff --git a/docs/manual/_static/copybutton_funcs.js b/docs/manual/_static/copybutton_funcs.js
new file mode 100644
index 00000000..b9168c55
--- /dev/null
+++ b/docs/manual/_static/copybutton_funcs.js
@@ -0,0 +1,58 @@
+function escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+// Callback when a copy button is clicked. Will be passed the node that was clicked
+// should then grab the text and replace pieces of text that shouldn't be used in output
+export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
+
+ var regexp;
+ var match;
+
+ // Do we check for line continuation characters and "HERE-documents"?
+ var useLineCont = !!lineContinuationChar
+ var useHereDoc = !!hereDocDelim
+
+ // create regexp to capture prompt and remaining line
+ if (isRegexp) {
+ regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
+ } else {
+ regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
+ }
+
+ const outputLines = [];
+ var promptFound = false;
+ var gotLineCont = false;
+ var gotHereDoc = false;
+ const lineGotPrompt = [];
+ for (const line of textContent.split('\n')) {
+ match = line.match(regexp)
+ if (match || gotLineCont || gotHereDoc) {
+ promptFound = regexp.test(line)
+ lineGotPrompt.push(promptFound)
+ if (removePrompts && promptFound) {
+ outputLines.push(match[2])
+ } else {
+ outputLines.push(line)
+ }
+ gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
+ if (line.includes(hereDocDelim) & useHereDoc)
+ gotHereDoc = !gotHereDoc
+ } else if (!onlyCopyPromptLines) {
+ outputLines.push(line)
+ } else if (copyEmptyLines && line.trim() === '') {
+ outputLines.push(line)
+ }
+ }
+
+ // If no lines with the prompt were found then just use original lines
+ if (lineGotPrompt.some(v => v === true)) {
+ textContent = outputLines.join('\n');
+ }
+
+ // Remove a trailing newline to avoid auto-running when pasting
+ if (textContent.endsWith("\n")) {
+ textContent = textContent.slice(0, -1)
+ }
+ return textContent
+}
diff --git a/docs/manual/_static/custom.css b/docs/manual/_static/custom.css
new file mode 100644
index 00000000..0abea7bb
--- /dev/null
+++ b/docs/manual/_static/custom.css
@@ -0,0 +1,24 @@
+h3 {
+ margin-top: 1.75rem;
+ margin-bottom: 0.5rem;
+}
+
+code.literal {
+ padding-left: 0.25rem !important;
+ padding-right: 0.25rem !important;
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.15rem !important;
+}
+
+img[src*="if_mode_graph_b.png"] {
+ background-color: rgb(169, 177, 186);
+}
+
+dt.sig {
+ margin-bottom: 0.75rem;
+ margin-top: 1.75rem;
+}
+
+div.bottom-of-page div.left-details:not(:first-child) {
+ display: none !important;
+}
\ No newline at end of file
diff --git a/docs/manual/_static/debug.css b/docs/manual/_static/debug.css
new file mode 100644
index 00000000..74d4aec3
--- /dev/null
+++ b/docs/manual/_static/debug.css
@@ -0,0 +1,69 @@
+/*
+ This CSS file should be overridden by the theme authors. It's
+ meant for debugging and developing the skeleton that this theme provides.
+*/
+body {
+ font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
+ "Apple Color Emoji", "Segoe UI Emoji";
+ background: lavender;
+}
+.sb-announcement {
+ background: rgb(131, 131, 131);
+}
+.sb-announcement__inner {
+ background: black;
+ color: white;
+}
+.sb-header {
+ background: lightskyblue;
+}
+.sb-header__inner {
+ background: royalblue;
+ color: white;
+}
+.sb-header-secondary {
+ background: lightcyan;
+}
+.sb-header-secondary__inner {
+ background: cornflowerblue;
+ color: white;
+}
+.sb-sidebar-primary {
+ background: lightgreen;
+}
+.sb-main {
+ background: blanchedalmond;
+}
+.sb-main__inner {
+ background: antiquewhite;
+}
+.sb-header-article {
+ background: lightsteelblue;
+}
+.sb-article-container {
+ background: snow;
+}
+.sb-article-main {
+ background: white;
+}
+.sb-footer-article {
+ background: lightpink;
+}
+.sb-sidebar-secondary {
+ background: lightgoldenrodyellow;
+}
+.sb-footer-content {
+ background: plum;
+}
+.sb-footer-content__inner {
+ background: palevioletred;
+}
+.sb-footer {
+ background: pink;
+}
+.sb-footer__inner {
+ background: salmon;
+}
+.sb-article {
+ background: white;
+}
diff --git a/docs/manual/_static/pygments.css b/docs/manual/_static/pygments.css
index 691aeb82..75471509 100644
--- a/docs/manual/_static/pygments.css
+++ b/docs/manual/_static/pygments.css
@@ -1,74 +1,255 @@
-pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight pre { line-height: 125%; }
+.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
-.highlight { background: #eeffcc; }
-.highlight .c { color: #408090; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #FF0000 } /* Error */
-.highlight .k { color: #007020; font-weight: bold } /* Keyword */
-.highlight .o { color: #666666 } /* Operator */
-.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #007020 } /* Comment.Preproc */
-.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
-.highlight .gd { color: #A00000 } /* Generic.Deleted */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #8f5902; font-style: italic } /* Comment */
+.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
+.highlight .g { color: #000000 } /* Generic */
+.highlight .k { color: #204a87; font-weight: bold } /* Keyword */
+.highlight .l { color: #000000 } /* Literal */
+.highlight .n { color: #000000 } /* Name */
+.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */
+.highlight .x { color: #000000 } /* Other */
+.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
+.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
+.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #a40000 } /* Generic.Deleted */
+.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #ef2929 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #333333 } /* Generic.Output */
-.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .go { color: #000000; font-style: italic } /* Generic.Output */
+.highlight .gp { color: #8f5902 } /* Generic.Prompt */
+.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #0044DD } /* Generic.Traceback */
-.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #007020 } /* Keyword.Pseudo */
-.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #902000 } /* Keyword.Type */
-.highlight .m { color: #208050 } /* Literal.Number */
-.highlight .s { color: #4070a0 } /* Literal.String */
-.highlight .na { color: #4070a0 } /* Name.Attribute */
-.highlight .nb { color: #007020 } /* Name.Builtin */
-.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.highlight .no { color: #60add5 } /* Name.Constant */
-.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #007020 } /* Name.Exception */
-.highlight .nf { color: #06287e } /* Name.Function */
-.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
-.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #bb60d5 } /* Name.Variable */
-.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mb { color: #208050 } /* Literal.Number.Bin */
-.highlight .mf { color: #208050 } /* Literal.Number.Float */
-.highlight .mh { color: #208050 } /* Literal.Number.Hex */
-.highlight .mi { color: #208050 } /* Literal.Number.Integer */
-.highlight .mo { color: #208050 } /* Literal.Number.Oct */
-.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
-.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
-.highlight .sc { color: #4070a0 } /* Literal.String.Char */
-.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
-.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
-.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.highlight .sx { color: #c65d09 } /* Literal.String.Other */
-.highlight .sr { color: #235388 } /* Literal.String.Regex */
-.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
-.highlight .ss { color: #517918 } /* Literal.String.Symbol */
-.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #06287e } /* Name.Function.Magic */
-.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
-.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
-.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
-.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
+.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
+.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
+.highlight .ld { color: #000000 } /* Literal.Date */
+.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */
+.highlight .s { color: #4e9a06 } /* Literal.String */
+.highlight .na { color: #c4a000 } /* Name.Attribute */
+.highlight .nb { color: #204a87 } /* Name.Builtin */
+.highlight .nc { color: #000000 } /* Name.Class */
+.highlight .no { color: #000000 } /* Name.Constant */
+.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
+.highlight .ni { color: #ce5c00 } /* Name.Entity */
+.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #000000 } /* Name.Function */
+.highlight .nl { color: #f57900 } /* Name.Label */
+.highlight .nn { color: #000000 } /* Name.Namespace */
+.highlight .nx { color: #000000 } /* Name.Other */
+.highlight .py { color: #000000 } /* Name.Property */
+.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #000000 } /* Name.Variable */
+.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
+.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
+.highlight .w { color: #f8f8f8 } /* Text.Whitespace */
+.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */
+.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
+.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
+.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
+.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
+.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
+.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
+.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
+.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
+.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
+.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
+.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
+.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
+.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
+.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
+.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
+.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
+.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #000000 } /* Name.Function.Magic */
+.highlight .vc { color: #000000 } /* Name.Variable.Class */
+.highlight .vg { color: #000000 } /* Name.Variable.Global */
+.highlight .vi { color: #000000 } /* Name.Variable.Instance */
+.highlight .vm { color: #000000 } /* Name.Variable.Magic */
+.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */
+@media not print {
+body[data-theme="dark"] .highlight pre { line-height: 125%; }
+body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+body[data-theme="dark"] .highlight .hll { background-color: #404040 }
+body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 }
+body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */
+body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */
+body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */
+body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
+body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */
+body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */
+body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */
+body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */
+body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */
+body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
+body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
+body[data-theme="dark"] .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
+body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
+body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
+body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
+body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */
+body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
+body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */
+body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
+body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */
+body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */
+body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
+body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
+body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
+body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */
+body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
+body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
+body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
+body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
+body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
+body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
+body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */
+body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */
+body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */
+body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */
+body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */
+body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
+body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */
+body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */
+body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */
+body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */
+body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */
+body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */
+body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
+body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */
+body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */
+body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
+body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */
+body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
+body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */
+body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */
+body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
+body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */
+body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
+body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
+body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
+body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
+body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
+body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
+body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
+body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
+body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
+body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
+body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
+body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
+body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */
+body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
+body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
+body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
+body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
+body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */
+body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */
+body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */
+body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
+body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
+body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
+@media (prefers-color-scheme: dark) {
+body:not([data-theme="light"]) .highlight pre { line-height: 125%; }
+body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+body:not([data-theme="light"]) .highlight .hll { background-color: #404040 }
+body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 }
+body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */
+body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */
+body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */
+body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
+body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */
+body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */
+body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */
+body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */
+body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */
+body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
+body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
+body:not([data-theme="light"]) .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
+body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
+body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
+body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
+body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */
+body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
+body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */
+body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
+body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */
+body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */
+body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
+body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
+body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
+body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */
+body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
+body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
+body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
+body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
+body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
+body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
+body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */
+body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */
+body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */
+body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */
+body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */
+body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
+body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */
+body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */
+body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */
+body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */
+body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */
+body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */
+body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
+body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */
+body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */
+body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
+body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */
+body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
+body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */
+body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */
+body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
+body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */
+body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
+body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
+body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
+body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
+body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
+body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
+body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
+body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
+body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
+body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
+body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
+body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
+body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */
+body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
+body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
+body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
+body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
+body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */
+body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */
+body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */
+body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
+body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
+body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
+}
+}
\ No newline at end of file
diff --git a/docs/manual/_static/rns_logo_512.png b/docs/manual/_static/rns_logo_512.png
new file mode 100644
index 00000000..ba3940a7
Binary files /dev/null and b/docs/manual/_static/rns_logo_512.png differ
diff --git a/docs/manual/_static/scripts/furo-extensions.js b/docs/manual/_static/scripts/furo-extensions.js
new file mode 100644
index 00000000..e69de29b
diff --git a/docs/manual/_static/scripts/furo.js b/docs/manual/_static/scripts/furo.js
new file mode 100644
index 00000000..cbf64878
--- /dev/null
+++ b/docs/manual/_static/scripts/furo.js
@@ -0,0 +1,3 @@
+/*! For license information please see furo.js.LICENSE.txt */
+(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)<o(e.content)?-1:1}))},c=function(e,n,o){var r=e.getBoundingClientRect(),c=function(t){return"function"==typeof t.offset?parseFloat(t.offset()):parseFloat(t.offset)}(n);return o?parseInt(r.bottom,10)<(t.innerHeight||document.documentElement.clientHeight):parseInt(r.top,10)<=c},s=function(){return Math.ceil(t.innerHeight+t.pageYOffset)>=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;function s(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function l(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",s)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){t<64?document.documentElement.classList.remove("show-back-to-top"):t<c?document.documentElement.classList.add("show-back-to-top"):t>c&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),l()}))})()})();
+//# sourceMappingURL=furo.js.map
\ No newline at end of file
diff --git a/docs/manual/_static/scripts/furo.js.LICENSE.txt b/docs/manual/_static/scripts/furo.js.LICENSE.txt
new file mode 100644
index 00000000..1632189c
--- /dev/null
+++ b/docs/manual/_static/scripts/furo.js.LICENSE.txt
@@ -0,0 +1,7 @@
+/*!
+ * gumshoejs v5.1.2 (patched by @pradyunsg)
+ * A simple, framework-agnostic scrollspy script.
+ * (c) 2019 Chris Ferdinandi
+ * MIT License
+ * http://github.com/cferdinandi/gumshoe
+ */
diff --git a/docs/manual/_static/scripts/furo.js.map b/docs/manual/_static/scripts/furo.js.map
new file mode 100644
index 00000000..7ed2be87
--- /dev/null
+++ b/docs/manual/_static/scripts/furo.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/furo.js","mappings":";iCAAA,MAQWA,SAWS,IAAX,EAAAC,EACH,EAAAA,EACkB,oBAAXC,OACPA,OACAC,KAbS,EAAF,WACP,OAaJ,SAAUD,GACR,aAMA,IAAIE,EAAW,CAEbC,SAAU,SACVC,aAAc,SAGdC,QAAQ,EACRC,YAAa,SAGbC,OAAQ,EACRC,QAAQ,EAGRC,QAAQ,GA6BNC,EAAY,SAAUC,EAAMC,EAAMC,GAEpC,GAAKA,EAAOC,SAASL,OAArB,CAGA,IAAIM,EAAQ,IAAIC,YAAYL,EAAM,CAChCM,SAAS,EACTC,YAAY,EACZL,OAAQA,IAIVD,EAAKO,cAAcJ,KAQjBK,EAAe,SAAUR,GAC3B,IAAIS,EAAW,EACf,GAAIT,EAAKU,aACP,KAAOV,GACLS,GAAYT,EAAKW,UACjBX,EAAOA,EAAKU,aAGhB,OAAOD,GAAY,EAAIA,EAAW,GAOhCG,EAAe,SAAUC,GACvBA,GACFA,EAASC,MAAK,SAAUC,EAAOC,GAG7B,OAFcR,EAAaO,EAAME,SACnBT,EAAaQ,EAAMC,UACF,EACxB,MA2CTC,EAAW,SAAUlB,EAAME,EAAUiB,GACvC,IAAIC,EAASpB,EAAKqB,wBACd1B,EAnCU,SAAUO,GAExB,MAA+B,mBAApBA,EAASP,OACX2B,WAAWpB,EAASP,UAItB2B,WAAWpB,EAASP,QA4Bd4B,CAAUrB,GACvB,OAAIiB,EAEAK,SAASJ,EAAOD,OAAQ,KACvB/B,EAAOqC,aAAeC,SAASC,gBAAgBC,cAG7CJ,SAASJ,EAAOS,IAAK,KAAOlC,GAOjCmC,EAAa,WACf,OACEC,KAAKC,KAAK5C,EAAOqC,YAAcrC,EAAO6C,cAnCjCF,KAAKG,IACVR,SAASS,KAAKC,aACdV,SAASC,gBAAgBS,aACzBV,SAASS,KAAKE,aACdX,SAASC,gBAAgBU,aACzBX,SAASS,KAAKP,aACdF,SAASC,gBAAgBC,eAqDzBU,EAAY,SAAUzB,EAAUX,GAClC,IAAIqC,EAAO1B,EAASA,EAAS2B,OAAS,GACtC,GAbgB,SAAUC,EAAMvC,GAChC,SAAI4B,MAAgBZ,EAASuB,EAAKxB,QAASf,GAAU,IAYjDwC,CAAYH,EAAMrC,GAAW,OAAOqC,EACxC,IAAK,IAAII,EAAI9B,EAAS2B,OAAS,EAAGG,GAAK,EAAGA,IACxC,GAAIzB,EAASL,EAAS8B,GAAG1B,QAASf,GAAW,OAAOW,EAAS8B,IAS7DC,EAAmB,SAAUC,EAAK3C,GAEpC,GAAKA,EAAST,QAAWoD,EAAIC,WAA7B,CAGA,IAAIC,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASR,aAG7BkD,EAAiBG,EAAI7C,MAQnBiD,EAAa,SAAUC,EAAOlD,GAEhC,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASX,UAC7B6D,EAAMnC,QAAQgC,UAAUC,OAAOhD,EAASV,cAGxCoD,EAAiBG,EAAI7C,GAGrBJ,EAAU,oBAAqBiD,EAAI,CACjCM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,OASVoD,EAAiB,SAAUT,EAAK3C,GAElC,GAAKA,EAAST,OAAd,CAGA,IAAIsD,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASR,aAG1B4D,EAAeP,EAAI7C,MA8LrB,OA1JkB,SAAUsD,EAAUC,GAKpC,IACIC,EAAU7C,EAAU8C,EAASC,EAAS1D,EADtC2D,EAAa,CAUjBA,MAAmB,WAEjBH,EAAWhC,SAASoC,iBAAiBN,GAGrC3C,EAAW,GAGXkD,MAAMC,UAAUC,QAAQC,KAAKR,GAAU,SAAUjB,GAE/C,IAAIxB,EAAUS,SAASyC,eACrBC,mBAAmB3B,EAAK4B,KAAKC,OAAO,KAEjCrD,GAGLJ,EAAS0D,KAAK,CACZ1B,IAAKJ,EACLxB,QAASA,OAKbL,EAAaC,IAMfgD,OAAoB,WAElB,IAAIW,EAASlC,EAAUzB,EAAUX,GAG5BsE,EASDb,GAAWa,EAAOvD,UAAY0C,EAAQ1C,UAG1CkC,EAAWQ,EAASzD,GAzFT,SAAUkD,EAAOlD,GAE9B,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASX,UAC1B6D,EAAMnC,QAAQgC,UAAUM,IAAIrD,EAASV,cAGrC8D,EAAeP,EAAI7C,GAGnBJ,EAAU,kBAAmBiD,EAAI,CAC/BM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,MAuEVuE,CAASD,EAAQtE,GAGjByD,EAAUa,GAfJb,IACFR,EAAWQ,EAASzD,GACpByD,EAAU,QAoBZe,EAAgB,SAAUvE,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,sBAAsBf,EAAWgB,SAOhDC,EAAgB,SAAU3E,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,uBAAsB,WACrChE,EAAaC,GACbgD,EAAWgB,aAoDf,OA7CAhB,EAAWkB,QAAU,WAEfpB,GACFR,EAAWQ,EAASzD,GAItBd,EAAO4F,oBAAoB,SAAUN,GAAe,GAChDxE,EAASN,QACXR,EAAO4F,oBAAoB,SAAUF,GAAe,GAItDjE,EAAW,KACX6C,EAAW,KACXC,EAAU,KACVC,EAAU,KACV1D,EAAW,MAQXA,EA3XS,WACX,IAAI+E,EAAS,GAOb,OANAlB,MAAMC,UAAUC,QAAQC,KAAKgB,WAAW,SAAUC,GAChD,IAAK,IAAIC,KAAOD,EAAK,CACnB,IAAKA,EAAIE,eAAeD,GAAM,OAC9BH,EAAOG,GAAOD,EAAIC,OAGfH,EAmXMK,CAAOhG,EAAUmE,GAAW,IAGvCI,EAAW0B,QAGX1B,EAAWgB,SAGXzF,EAAOoG,iBAAiB,SAAUd,GAAe,GAC7CxE,EAASN,QACXR,EAAOoG,iBAAiB,SAAUV,GAAe,GAS9CjB,GA7bA4B,CAAQvG,IAChB,QAFM,SAEN,uBCXDwG,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,IAOV,OAHAE,EAAoBL,GAAU1B,KAAK8B,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,QCpBfJ,EAAoBO,EAAKF,IACxB,IAAIG,EAASH,GAAUA,EAAOI,WAC7B,IAAOJ,EAAiB,QACxB,IAAM,EAEP,OADAL,EAAoBU,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GCLRR,EAAoBU,EAAI,CAACN,EAASQ,KACjC,IAAI,IAAInB,KAAOmB,EACXZ,EAAoBa,EAAED,EAAYnB,KAASO,EAAoBa,EAAET,EAASX,IAC5EqB,OAAOC,eAAeX,EAASX,EAAK,CAAEuB,YAAY,EAAMC,IAAKL,EAAWnB,MCJ3EO,EAAoBxG,EAAI,WACvB,GAA0B,iBAAf0H,WAAyB,OAAOA,WAC3C,IACC,OAAOxH,MAAQ,IAAIyH,SAAS,cAAb,GACd,MAAOC,GACR,GAAsB,iBAAX3H,OAAqB,OAAOA,QALjB,GCAxBuG,EAAoBa,EAAI,CAACrB,EAAK6B,IAAUP,OAAOzC,UAAUqB,eAAenB,KAAKiB,EAAK6B,4CCK9EC,EAAY,KACZC,EAAS,KACTC,EAAgB/H,OAAO6C,aAAeP,SAASC,gBAAgByF,UA4EnE,SAASC,IACP,MAAMC,EAAeC,aAAaC,QAAQ,UAAY,OAZxD,IAAkBC,EACH,WADGA,EAaIrI,OAAOsI,WAAW,gCAAgCC,QAI/C,SAAjBL,EACO,QACgB,SAAhBA,EACA,OAEA,OAIU,SAAjBA,EACO,OACgB,QAAhBA,EACA,QAEA,SA9BoB,SAATG,GAA4B,SAATA,IACzCG,QAAQC,MAAM,2BAA2BJ,yBACzCA,EAAO,QAGT/F,SAASS,KAAK2F,QAAQC,MAAQN,EAC9BF,aAAaS,QAAQ,QAASP,GAC9BG,QAAQK,IAAI,cAAcR,WA4E5B,SAASlC,KART,WAEE,MAAM2C,EAAUxG,SAASyG,uBAAuB,gBAChDpE,MAAMqE,KAAKF,GAASjE,SAASoE,IAC3BA,EAAI7C,iBAAiB,QAAS6B,MAKhCiB,GA9CF,WAEE,IAAIC,EAA6B,EAC7BC,GAAU,EAEdpJ,OAAOoG,iBAAiB,UAAU,SAAUuB,GAC1CwB,EAA6BnJ,OAAOqJ,QAE/BD,IACHpJ,OAAOwF,uBAAsB,WAzDnC,IAAuB8D,IA0DDH,EA9GkC,GAAlDxG,KAAK4G,MAAMzB,EAAO7F,wBAAwBQ,KAC5CqF,EAAOjE,UAAUM,IAAI,YAErB2D,EAAOjE,UAAUC,OAAO,YAI5B,SAAmCwF,GAC7BA,EAXmB,GAYrBhH,SAASC,gBAAgBsB,UAAUC,OAAO,oBAEtCwF,EAAYvB,EACdzF,SAASC,gBAAgBsB,UAAUM,IAAI,oBAC9BmF,EAAYvB,GACrBzF,SAASC,gBAAgBsB,UAAUC,OAAO,oBAG9CiE,EAAgBuB,EAqChBE,CAA0BF,GAlC5B,SAA6BA,GACT,OAAdzB,IAKa,GAAbyB,EACFzB,EAAU4B,SAAS,EAAG,GAGtB9G,KAAKC,KAAK0G,IACV3G,KAAK4G,MAAMjH,SAASC,gBAAgBS,aAAehD,OAAOqC,aAE1DwF,EAAU4B,SAAS,EAAG5B,EAAU7E,cAGhBV,SAASoH,cAAc,oBAmBzCC,CAAoBL,GAwDdF,GAAU,KAGZA,GAAU,MAGdpJ,OAAO4J,SA8BPC,GA1BkB,OAAdhC,GAKJ,IAAI,IAAJ,CAAY,cAAe,CACzBrH,QAAQ,EACRsJ,WAAW,EACX3J,SAAU,iBACVI,OAAQ,KACN,IAAIwJ,EAAM7H,WAAW8H,iBAAiB1H,SAASC,iBAAiB0H,UAChE,OAAOnC,EAAO7F,wBAAwBiI,OAAS,GAAMH,EAAM,KA+BjEzH,SAAS8D,iBAAiB,oBAT1B,WACE9D,SAASS,KAAKW,WAAWG,UAAUC,OAAO,SAE1CgE,EAASxF,SAASoH,cAAc,UAChC7B,EAAYvF,SAASoH,cAAc,eAEnCvD","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""}
\ No newline at end of file
diff --git a/docs/manual/_static/sidebar.js b/docs/manual/_static/sidebar.js
deleted file mode 100644
index ae3080bd..00000000
--- a/docs/manual/_static/sidebar.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * sidebar.js
- * ~~~~~~~~~~
- *
- * This script makes the Sphinx sidebar collapsible.
- *
- * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
- * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
- * used to collapse and expand the sidebar.
- *
- * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
- * and the width of the sidebar and the margin-left of the document
- * are decreased. When the sidebar is expanded the opposite happens.
- * This script saves a per-browser/per-session cookie used to
- * remember the position of the sidebar among the pages.
- * Once the browser is closed the cookie is deleted and the position
- * reset to the default (expanded).
- *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-const initialiseSidebar = () => {
-
-
-
-
- // global elements used by the functions.
- const bodyWrapper = document.getElementsByClassName("bodywrapper")[0]
- const sidebar = document.getElementsByClassName("sphinxsidebar")[0]
- const sidebarWrapper = document.getElementsByClassName('sphinxsidebarwrapper')[0]
- const sidebarButton = document.getElementById("sidebarbutton")
- const sidebarArrow = sidebarButton.querySelector('span')
-
- // for some reason, the document has no sidebar; do not run into errors
- if (typeof sidebar === "undefined") return;
-
- const flipArrow = element => element.innerText = (element.innerText === "Β»") ? "Β«" : "Β»"
-
- const collapse_sidebar = () => {
- bodyWrapper.style.marginLeft = ".8em";
- sidebar.style.width = ".8em"
- sidebarWrapper.style.display = "none"
- flipArrow(sidebarArrow)
- sidebarButton.title = _('Expand sidebar')
- window.localStorage.setItem("sidebar", "collapsed")
- }
-
- const expand_sidebar = () => {
- bodyWrapper.style.marginLeft = ""
- sidebar.style.removeProperty("width")
- sidebarWrapper.style.display = ""
- flipArrow(sidebarArrow)
- sidebarButton.title = _('Collapse sidebar')
- window.localStorage.setItem("sidebar", "expanded")
- }
-
- sidebarButton.addEventListener("click", () => {
- (sidebarWrapper.style.display === "none") ? expand_sidebar() : collapse_sidebar()
- })
-
- if (!window.localStorage.getItem("sidebar")) return
- const value = window.localStorage.getItem("sidebar")
- if (value === "collapsed") collapse_sidebar();
- else if (value === "expanded") expand_sidebar();
-}
-
-if (document.readyState !== "loading") initialiseSidebar()
-else document.addEventListener("DOMContentLoaded", initialiseSidebar)
\ No newline at end of file
diff --git a/docs/manual/_static/skeleton.css b/docs/manual/_static/skeleton.css
new file mode 100644
index 00000000..467c878c
--- /dev/null
+++ b/docs/manual/_static/skeleton.css
@@ -0,0 +1,296 @@
+/* Some sane resets. */
+html {
+ height: 100%;
+}
+
+body {
+ margin: 0;
+ min-height: 100%;
+}
+
+/* All the flexbox magic! */
+body,
+.sb-announcement,
+.sb-content,
+.sb-main,
+.sb-container,
+.sb-container__inner,
+.sb-article-container,
+.sb-footer-content,
+.sb-header,
+.sb-header-secondary,
+.sb-footer {
+ display: flex;
+}
+
+/* These order things vertically */
+body,
+.sb-main,
+.sb-article-container {
+ flex-direction: column;
+}
+
+/* Put elements in the center */
+.sb-header,
+.sb-header-secondary,
+.sb-container,
+.sb-content,
+.sb-footer,
+.sb-footer-content {
+ justify-content: center;
+}
+/* Put elements at the ends */
+.sb-article-container {
+ justify-content: space-between;
+}
+
+/* These elements grow. */
+.sb-main,
+.sb-content,
+.sb-container,
+article {
+ flex-grow: 1;
+}
+
+/* Because padding making this wider is not fun */
+article {
+ box-sizing: border-box;
+}
+
+/* The announcements element should never be wider than the page. */
+.sb-announcement {
+ max-width: 100%;
+}
+
+.sb-sidebar-primary,
+.sb-sidebar-secondary {
+ flex-shrink: 0;
+ width: 17rem;
+}
+
+.sb-announcement__inner {
+ justify-content: center;
+
+ box-sizing: border-box;
+ height: 3rem;
+
+ overflow-x: auto;
+ white-space: nowrap;
+}
+
+/* Sidebars, with checkbox-based toggle */
+.sb-sidebar-primary,
+.sb-sidebar-secondary {
+ position: fixed;
+ height: 100%;
+ top: 0;
+}
+
+.sb-sidebar-primary {
+ left: -17rem;
+ transition: left 250ms ease-in-out;
+}
+.sb-sidebar-secondary {
+ right: -17rem;
+ transition: right 250ms ease-in-out;
+}
+
+.sb-sidebar-toggle {
+ display: none;
+}
+.sb-sidebar-overlay {
+ position: fixed;
+ top: 0;
+ width: 0;
+ height: 0;
+
+ transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease;
+
+ opacity: 0;
+ background-color: rgba(0, 0, 0, 0.54);
+}
+
+#sb-sidebar-toggle--primary:checked
+ ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"],
+#sb-sidebar-toggle--secondary:checked
+ ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] {
+ width: 100%;
+ height: 100%;
+ opacity: 1;
+ transition: width 0ms ease, height 0ms ease, opacity 250ms ease;
+}
+
+#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary {
+ left: 0;
+}
+#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary {
+ right: 0;
+}
+
+/* Full-width mode */
+.drop-secondary-sidebar-for-full-width-content
+ .hide-when-secondary-sidebar-shown {
+ display: none !important;
+}
+.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary {
+ display: none !important;
+}
+
+/* Mobile views */
+.sb-page-width {
+ width: 100%;
+}
+
+.sb-article-container,
+.sb-footer-content__inner,
+.drop-secondary-sidebar-for-full-width-content .sb-article,
+.drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 100vw;
+}
+
+.sb-article,
+.match-content-width {
+ padding: 0 1rem;
+ box-sizing: border-box;
+}
+
+@media (min-width: 32rem) {
+ .sb-article,
+ .match-content-width {
+ padding: 0 2rem;
+ }
+}
+
+/* Tablet views */
+@media (min-width: 42rem) {
+ .sb-article-container {
+ width: auto;
+ }
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 42rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 42rem;
+ }
+}
+@media (min-width: 46rem) {
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 46rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 46rem;
+ }
+}
+@media (min-width: 50rem) {
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 50rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 50rem;
+ }
+}
+
+/* Tablet views */
+@media (min-width: 59rem) {
+ .sb-sidebar-secondary {
+ position: static;
+ }
+ .hide-when-secondary-sidebar-shown {
+ display: none !important;
+ }
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 59rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 42rem;
+ }
+}
+@media (min-width: 63rem) {
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 63rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 46rem;
+ }
+}
+@media (min-width: 67rem) {
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 67rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 50rem;
+ }
+}
+
+/* Desktop views */
+@media (min-width: 76rem) {
+ .sb-sidebar-primary {
+ position: static;
+ }
+ .hide-when-primary-sidebar-shown {
+ display: none !important;
+ }
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 59rem;
+ }
+ .sb-article,
+ .match-content-width {
+ width: 42rem;
+ }
+}
+
+/* Full desktop views */
+@media (min-width: 80rem) {
+ .sb-article,
+ .match-content-width {
+ width: 46rem;
+ }
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 63rem;
+ }
+}
+
+@media (min-width: 84rem) {
+ .sb-article,
+ .match-content-width {
+ width: 50rem;
+ }
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 67rem;
+ }
+}
+
+@media (min-width: 88rem) {
+ .sb-footer-content__inner,
+ .drop-secondary-sidebar-for-full-width-content .sb-article,
+ .drop-secondary-sidebar-for-full-width-content .match-content-width {
+ width: 67rem;
+ }
+ .sb-page-width {
+ width: 88rem;
+ }
+}
diff --git a/docs/manual/_static/styles/furo-extensions.css b/docs/manual/_static/styles/furo-extensions.css
new file mode 100644
index 00000000..bc447f22
--- /dev/null
+++ b/docs/manual/_static/styles/furo-extensions.css
@@ -0,0 +1,2 @@
+#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)}
+/*# sourceMappingURL=furo-extensions.css.map*/
\ No newline at end of file
diff --git a/docs/manual/_static/styles/furo-extensions.css.map b/docs/manual/_static/styles/furo-extensions.css.map
new file mode 100644
index 00000000..9ba5637f
--- /dev/null
+++ b/docs/manual/_static/styles/furo-extensions.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/docs/manual/_static/styles/furo.css b/docs/manual/_static/styles/furo.css
new file mode 100644
index 00000000..16a3d67c
--- /dev/null
+++ b/docs/manual/_static/styles/furo.css
@@ -0,0 +1,2 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M0 0h24v24H0z" stroke="none"/><circle cx="10" cy="10" r="7"/><path d="m21 21-6-6"/></svg>');--icon-pencil:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>');--icon-abstract:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 5h16v2H4V5m0 4h16v2H4V9m0 4h16v2H4v-2m0 4h10v2H4v-2z"/></svg>');--icon-info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2z"/></svg>');--icon-flame:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.55 11.2c-.23-.3-.5-.56-.76-.82-.65-.6-1.4-1.03-2.03-1.66C13.3 7.26 13 4.85 13.91 3c-.91.23-1.75.75-2.45 1.32-2.54 2.08-3.54 5.75-2.34 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.22.1-.46.04-.64-.12a.83.83 0 0 1-.15-.17c-1.1-1.43-1.28-3.48-.53-5.12C5.89 10 5 12.3 5.14 14.47c.04.5.1 1 .27 1.5.14.6.4 1.2.72 1.73 1.04 1.73 2.87 2.97 4.84 3.22 2.1.27 4.35-.12 5.96-1.6 1.8-1.66 2.45-4.32 1.5-6.6l-.13-.26c-.2-.46-.47-.87-.8-1.25l.05-.01m-3.1 6.3c-.28.24-.73.5-1.08.6-1.1.4-2.2-.16-2.87-.82 1.19-.28 1.89-1.16 2.09-2.05.17-.8-.14-1.46-.27-2.23-.12-.74-.1-1.37.18-2.06.17.38.37.76.6 1.06.76 1 1.95 1.44 2.2 2.8.04.14.06.28.06.43.03.82-.32 1.72-.92 2.27h.01z"/></svg>');--icon-question:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10z"/></svg>');--icon-warning:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 14h-2v-4h2m0 8h-2v-2h2M1 21h22L12 2 1 21z"/></svg>');--icon-failure:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2c5.53 0 10 4.47 10 10s-4.47 10-10 10S2 17.53 2 12 6.47 2 12 2m3.59 5L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41 15.59 7z"/></svg>');--icon-spark:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m11.5 20 4.86-9.73H13V4l-5 9.73h3.5V20M12 2c2.75 0 5.1 1 7.05 2.95C21 6.9 22 9.25 22 12s-1 5.1-2.95 7.05C17.1 21 14.75 22 12 22s-5.1-1-7.05-2.95C3 17.1 2 14.75 2 12s1-5.1 2.95-7.05C6.9 3 9.25 2 12 2z"/></svg>');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.1);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.1);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.1);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.1);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.1);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.1);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.1);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.1);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.1);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.1);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.1);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.1);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.1);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-secondary);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;-webkit-text-decoration-color:var(--color-link-underline);text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);-webkit-text-decoration-color:var(--color-link-underline--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);-webkit-text-decoration-color:var(--color-link-underline--hover);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground)}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:-webkit-sticky;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);-webkit-text-decoration-color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);-webkit-text-decoration-color:var(--color-link--hover);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;width:100%}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig{background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em}.sig:hover{background:var(--color-api-background-hover)}.sig a.reference .viewcode-link{font-weight:400;width:3.5rem}.sig span.pre{overflow-wrap:anywhere}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}p code.literal{border:1px solid var(--color-background-border)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);overflow:auto;padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{font-weight:500}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;-webkit-text-decoration-line:none;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;-webkit-text-decoration-color:var(--color-link-underline);text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right}
+/*# sourceMappingURL=furo.css.map*/
\ No newline at end of file
diff --git a/docs/manual/_static/styles/furo.css.map b/docs/manual/_static/styles/furo.css.map
new file mode 100644
index 00000000..03770b08
--- /dev/null
+++ b/docs/manual/_static/styles/furo.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/furo.css","mappings":"AAAA,2EAA2E,CAU3E,KAEE,6BAA8B,CAD9B,gBAEF,CASA,KACE,QACF,CAMA,KACE,aACF,CAOA,GACE,aAAc,CACd,cACF,CAUA,GACE,sBAAuB,CACvB,QAAS,CACT,gBACF,CAOA,IACE,+BAAiC,CACjC,aACF,CASA,EACE,4BACF,CAOA,YACE,kBAAmB,CACnB,yBAA0B,CAC1B,gCACF,CAMA,SAEE,kBACF,CAOA,cAGE,+BAAiC,CACjC,aACF,CAeA,QAEE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACF,CAEA,IACE,aACF,CAEA,IACE,SACF,CASA,IACE,iBACF,CAUA,sCAKE,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,QACF,CAOA,aAEE,gBACF,CAOA,cAEE,mBACF,CAMA,gDAIE,yBACF,CAMA,wHAIE,iBAAkB,CAClB,SACF,CAMA,4GAIE,6BACF,CAMA,SACE,0BACF,CASA,OACE,qBAAsB,CACtB,aAAc,CACd,aAAc,CACd,cAAe,CACf,SAAU,CACV,kBACF,CAMA,SACE,uBACF,CAMA,SACE,aACF,CAOA,6BAEE,qBAAsB,CACtB,SACF,CAMA,kFAEE,WACF,CAOA,cACE,4BAA6B,CAC7B,mBACF,CAMA,yCACE,uBACF,CAOA,6BACE,yBAA0B,CAC1B,YACF,CASA,QACE,aACF,CAMA,QACE,iBACF,CAiBA,kBACE,YACF,CCvVA,aAcE,kEACE,uBAOF,WACE,iDARA,CCpBJ,iBAOE,6BAEA,mBANA,qBAEA,sBACA,0BAFA,oBAHA,4BAOA,6BANA,mBAOA,CAEF,gBACE,aCPF,KCGE,mHAEA,wGAGA,wBAAyB,CACzB,wBAAyB,CACzB,4BAA6B,CAC7B,yBAA0B,CAC1B,2BAA4B,CAG5B,sDAAuD,CACvD,gDAAiD,CACjD,wDAAyD,CAGzD,0CAA2C,CAC3C,gDAAiD,CACjD,gDAAiD,CAKjD,gCAAiC,CACjC,sCAAuC,CAGvC,2CAA4C,CAG5C,uCAAwC,CChCxC,+FAGA,uBAAwB,CAGxB,iCAAkC,CAClC,kCAAmC,CAEnC,+BAAgC,CAChC,sCAAuC,CACvC,sCAAuC,CACvC,qGAIA,mDAAoD,CAEpD,mCAAoC,CACpC,8CAA+C,CAC/C,gDAAiD,CACjD,kCAAmC,CACnC,6DAA8D,CAG9D,6BAA8B,CAC9B,6BAA8B,CAC9B,+BAAgC,CAChC,kCAAmC,CACnC,kCAAmC,CCPjC,ukBCYA,srCAZF,kaCVA,mLAOA,oTAWA,2UAaA,0CACA,gEACA,0CAGA,gEAUA,yCACA,+DAIA,4CACA,kEAGA,sGAEA,mGAGA,sCACA,2DAEA,4CACA,kEACA,uCACA,6DAEA,2GACA,+CAGA,+MAOA,4BACA,2FAIA,4DACA,sEACA,kEACA,sEACA,gDAGA,kCACA,uEACA,mCACA,4DACA,yDAGA,2DACA,qDAGA,0CACA,8CACA,oDACA,oDL7GF,iCAEA,iEAME,oCKyGA,yDAIA,sCACA,kCACA,sDAGA,0CACA,kEACA,oDAEA,sDAGA,oCACA,oEAIA,CAGA,yDAGA,qDACA,oDAGA,6DAIA,iEAGA,2DAEA,2DL9IE,4DAEA,gEAIF,gEKgGA,gFAIA,oNAOA,qDAEA,gFAIA,4DAIA,oEAMA,yEAIA,6DACA,0DAGA,uDAGA,qDAEA,wDLpII,6DAEA,yDACE,2DAMN,uCAIA,yCACE,8CAGF,sDMjDA,6DAKA,oCAIA,4CACA,kBAGF,sBAMA,2BAME,qCAGA,qCAEA,iCAEA,+BAEA,mCAEA,qCAIA,CACA,gCACA,gDAKA,kCAIA,6BAEA,0CAQA,kCAIF,8BAGE,8BACA,uCAGF,sCAKE,kCAEA,sDACA,uEAGE,sDACA,gGACF,wCAGI,sBACA,yHCzEJ,2BACA,qCAGF,sEAGE,kEAGA,sHAGA,2IACE,8BACA,8BAOF,uCAEA,wEAGA,sDACA,iCAKA,CAEF,qCAEE,sDACA,gCACA,gEAKA,+CAOE,sBACA,gEAGA,GAYF,yLACA,gDAGA,mBAEA,wCACA,wCAGF,CAEE,iCAGF,wBACE,mBAIF,oBAFE,eAEF,CAJE,gBAEA,CAMA,mBACA,mBAGA,mDAIA,YACA,mBAEA,CACA,kBAGF,OAJE,kBAQA,CAJF,GACE,aAGA,IACA,mCACA,qBAEF,IACE,oBAEA,aACA,CAFA,WAEA,GAEE,oBAKJ,CAPE,gBAOF,aACE,+CAGA,UAHA,kCAGA,4BACA,GAEA,uBACA,CAHA,yBAEA,CACA,yDAGF,kDAEE,SACA,8BAEA,iEAGE,yDACA,sEAEA,iEAEE,yHAKN,kDAMA,0DAIE,CANA,oBAMA,0GAOA,aAEF,CAHE,YAGF,4HAWE,+CACE,iCAIJ,0CAGE,CALE,qCAEJ,CAHI,WAMF,SAIA,0CAIA,CANF,qCAME,mBACA,gBACA,gBAIA,+CAEE,CAIF,kDAGF,CAPI,8BAGJ,CAKE,YACF,CAbE,2BAEA,CAHA,WAYF,UAEA,yBACE,kBAIA,iEAKA,iCAGA,mDAEA,mBACF,OACE,iBAQA,0CAIA,CAPA,6DAGA,CALF,qBAEE,CAOA,qCAEE,CAGA,eAHA,sBAGA,gCAKF,qBACE,WACA,aACA,sCAEA,mBAOJ,6BASE,kCACA,CAHA,sBACA,aACA,CARA,uBAGA,gBAEA,MAIA,6BAEA,yBACA,2DAEA,sBAGA,8BACA,CANA,wBAMA,2BAEE,YACA,sBACA,WAEF,CAFE,UAEF,eAeF,kBAEE,CAhBE,qDAGA,qCAOJ,CAEI,YAEJ,CAJA,2BAEI,CAIF,eACE,qBACF,4CAIE,uBACA,sBACF,cACE,CAFA,aACF,CAEE,kBADA,kBACA,yBAGF,oCACE,6DAMF,qDAGE,CC1VY,8BDgWd,oCAEA,uDAEA,CACE,8CAIA,gCAEA,YACA,8CACA,CAEA,oCAGE,CAHF,oCAGE,mBAEA,mDADA,YADA,qBACA,WACA,sBAEE,WAGN,kBACE,qCAIA,eADF,YACE,iDAKA,uCAEA,YACA,+CAMA,kBAEJ,CAHI,sBAGJ,mBAEI,cAEF,qCAGE,YE1ZJ,CFyZI,WACA,CExZF,SAEA,CAFA,mBADA,gBACA,CAFF,iBAIE,6CAEA,yBACA,uFAEA,kCAGA,mBAOA,gCAGF,CAPE,SAIA,UAPA,cAGA,4DAIA,CAJA,OAOF,kBACE,wBACA,2BAEA,gCACA,CAFA,UAEA,aAGA,iCACA,CAHA,UAGA,wCAIA,sBAHA,UAGA,6CAGE,OADA,KACA,CACA,4BAIJ,WACE,WADF,UACE,kCACA,QADA,KACA,cAEE,0CACA,CADA,mBACA,wEAIF,CANE,aACA,mBADA,MACA,CAKF,eACE,CANA,iCADA,eADF,oBACE,CACA,SAMA,2BADF,UACE,kBACA,gFACA,kDAMF,mBADF,YACE,6BAGE,uCACE,2CAEE,oDADF,4BACE,YADF,KAEE,kEACE,yCACA,uDANN,iBACE,uBACA,CADA,+BACA,uEACE,kCACA,6BAEE,mBADA,0CACA,CAFF,uBACE,sBACA,0DALJ,wEACA,sEACE,YACA,yDACE,oDACA,6DANN,kCACE,kCACA,gBADA,UACA,yBACE,wDACA,cADA,UACA,qBACE,6CACA,yFALJ,sCACA,CAEE,gBACE,CAHJ,gBAGI,sBAHJ,uBACE,4DACA,4CACE,iDAJJ,2CACA,CADA,gBAEE,gBAGE,sBALJ,+BAII,iBAFF,gDACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCpEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDAGA,qCACA,6BAIA,kBACA,qDAIA,oCAGE,+DAIA,2CAKF,oDAIA,sCAEE,8BACJ,qBACE,wDAGA,uCAEA,kEAIF,8CAGE,uDAEE,oCAGJ,4BAEE,6BC9FA,gEAGE,+CCHJ,0EAGE,sDAKA,gEACE,qCACA,8BAEA,oCAGF,wBACE,4FCdF,gBAEA,yGAIE,kBAOJ,CAKE,2MAUE,oBAEF,wGASE,iCAEA,CAJF,wBAIE,8GAOF,mBAGA,2GAEE,mBAGF,6HAQF,YACE,mIAOA,eAEA,CAFA,YAEA,4FAEA,8BAEA,MAaA,sCAIA,CANE,oBAEF,CAXE,wCACE,CAHJ,8BAEE,CAFF,gBASA,+BACA,mBAOA,YACE,6EACA,eACA,aACA,eACA,mCACA,0CAEF,8BA7FwB,CA+FtB,qCACA,6CAGF,CAHE,eAGF,wCAGE,YACA,iBAEA,mCACE,0DAMF,qBACA,CAFF,kBAEE,+BAEA,4BACA,2EC/HF,8CACA,qDAKA,iCACA,kBAEA,2FACA,iCAEE,CAEE,eAEF,CAHA,kBACE,CAFF,wBAIA,8BAIE,gBAHA,YAGA,4DAEA,mBACE,qCAGJ,kBACA,gBAGJ,+CAEE,kDAEF,YAEE,CAFF,YAEE,CChCA,2FAGA,6CACE,eAGA,iEACE,CAGF,aACA,CAJE,uBAIF,mBAMA,6CAEF,CAJE,mBAEC,CAEH,kCAGE,CARF,kBACE,CAHA,eAUA,YACA,mBACA,CAFA,UAEA,wCC/BJ,mBACE,CDkCE,wBACA,sBCpCJ,iBACE,mDACA,2CACA,sBAGA,qBCDA,6CAIE,CAPF,uBAGA,CDGE,oBACF,yDAEE,CCDE,2CAGF,CAJA,kCACE,CDJJ,YACE,CAIA,eCTF,CDKE,uBCMA,gCACE,YAEF,oCAEE,wBACA,0BAIF,iBAEA,cADF,UACE,uBAEA,iCACF,YACE,4BACF,6CAOE,CAYF,gCATI,4BASJ,CAZE,mCAEE,iCAUJ,4BAGE,4DAFA,+BAEA,CAHF,qBAGE,sCACE,OAEF,iBAHA,SAGA,4KAMA,CANA,8EAMA,ySAEE,QAEF,2ICjEJ,WACE,yCAIA,WACA,yBAEA,uCAIA,uCAGA,CALE,iCAKF,uCAGE,eACA,iCClBJ,gBACE,KAGF,qBACE,YAGF,CAHE,cAGF,gCAEE,mBACA,iEAEA,oCACA,wCAEA,sBACA,WAEA,CAFA,YAEA,8EAEA,mCAFA,iBAEA,6BAIA,wEAKA,sDAIE,CARF,mDAIA,CAIE,cAEF,8CAIA,oBAFE,iBAEF,8CAGE,eAEF,CAFE,YAEF,OAEE,kBAGJ,CAJI,eACA,CAFF,mBAKF,yCCjDE,oBACA,CAFA,iBAEA,uCAKE,iBACA,qCAGA,mBCZJ,CDWI,gBCXJ,6BAEE,eACA,sBAGA,eAEA,sBACA,oDACA,iGAMA,gBAFE,YAEF,8FAME,iJClBF,YACA,gNAUE,6BAEF,oTAcI,kBACF,gHAIA,qBACE,eACF,qDACE,kBACF,6DACE,4BCxCJ,oBAEF,qCAEI,+CAGF,uBACE,uDAGJ,oBAkBE,mDAhBA,+CAaA,CAbA,oBAaA,0FAEE,CAFF,gGAbA,+BAaA,0BAGA,mQAIA,oNAEE,kCADA,gBACA,aAGJ,sDAHI,mBAGJ,yBAYI,+VACE,sDAGA,iBAHA,2BAGA,kWAGN,iDAEE,CALI,gGAGN,CAHM,gBAKJ,yCAGF,0EACE,2EAGF,iBACE,yDAOA,0EAGF,6EAEE,iBC/EA,wDACA,4DACA,qBAEA,oDCDA,6BACA,yBACA,sBAEA,iBAGF,sNAYE,iBAEA,kBAdF,wRA8BI,kBACA,iOAkBA,aACA,4DACE,uEAEA,uVAoBA,iDAKA,ieC1EJ,4BACA,CCFF,6JAEE,iDACA,sEAIA,mDAGA,iDAOF,4DAGE,8CAEA,CAEA,kBACA,CAHA,gCAEA,CACA,eADA,cACA,oBAEE,uBAFF,kCAEE,gCAEF,kBACE,CAIA,mDAEA,CAHA,uCACA,CALF,aACE,6BAEA,CAIA,gBAJA,mCACA,CADA,gBAIA,wBACA,6CAGF,YAHE,iBAGF,gCAGA,iEACA,6CAEA,qDACA,6EACA,2EACA,8GAEA,yCAGA,uBACA,CAFA,yBACA,CACA,yDAKA,kDACE,mFAKJ,oCACE,CANE,aAKJ,CACE,qEAIA,YAFA,WAEA,CAHA,aACA,CAEA,gBACE,4BACA,sBADA,aACA,gCAMF,oCACA,yDACA,2CAEA,qBAGE,kBAEA,CACA,mCAIF,CARE,YACA,CAOF,iCAEE,CAPA,oBACA,CAQA,oBACE,uDAEJ,sDAGA,CAHA,cAGA,0BACE,oDAIA,oCACA,4BACA,sBAGA,cAEA,oFAGA,sBAEA,yDACE,CAIA,iBAJA,wBAIA,6CAJA,6CAOA,4BAGJ,CAHI,cAGJ,yCAGA,kBACE,CAIA,iDAEA,CATA,YAEF,CACE,4CAGA,kBAKA,wEAIF,wDACE,kCAOA,kDAPA,UACA,CAKA,sCACA,CANA,2CAGA,CAGA,qCAKA,8BACE,CAZF,kBAGA,qCASE,iBAoBJ,sBAOA,CAvBE,sEAKF,CALE,wDAJE,qBAIF,CAaE,4CAGJ,CANA,gRAGI,YAUJ,iCAGA,+CACE,+CAMF,6EClNF,4BAKE,SAJA,qFAIA,kBACA,8BACA,uCACA,oCAIA,eAEF,uCACE,CAGA,kDAEA,CALA,0CAKA,kBAEA,mEAFA,YAEA,CAFA,SAEA,kBAGA,QACE,CADF,iBACE,qBACA,kDAEA,CAIA,6CAHE,oCAgBF,CAbA,yBAEA,qBACA,CACF,oBACE,CAGE,YAHF,2CAEA,uBACE,oFAKF,CANA,qBACE,UAKF,gCACA,sDAOJ,yCChDE,oCAGI,CD6CN,yXCnDE,gBAEF,sBAIE","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/variables/_layout.scss","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_search.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\"/><circle cx=\"10\" cy=\"10\" r=\"7\" /><line x1=\"21\" y1=\"21\" x2=\"15\" y2=\"15\" /></svg>'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z\"/></svg>'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16v2H4V5m0 4h16v2H4V9m0 4h16v2H4v-2m0 4h10v2H4v-2z\"/></svg>'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10A10 10 0 0012 2z\"/></svg>'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M17.55 11.2c-.23-.3-.5-.56-.76-.82-.65-.6-1.4-1.03-2.03-1.66C13.3 7.26 13 4.85 13.91 3c-.91.23-1.75.75-2.45 1.32-2.54 2.08-3.54 5.75-2.34 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.22.1-.46.04-.64-.12a.83.83 0 01-.15-.17c-1.1-1.43-1.28-3.48-.53-5.12C5.89 10 5 12.3 5.14 14.47c.04.5.1 1 .27 1.5.14.6.4 1.2.72 1.73 1.04 1.73 2.87 2.97 4.84 3.22 2.1.27 4.35-.12 5.96-1.6 1.8-1.66 2.45-4.32 1.5-6.6l-.13-.26c-.2-.46-.47-.87-.8-1.25l.05-.01m-3.1 6.3c-.28.24-.73.5-1.08.6-1.1.4-2.2-.16-2.87-.82 1.19-.28 1.89-1.16 2.09-2.05.17-.8-.14-1.46-.27-2.23-.12-.74-.1-1.37.18-2.06.17.38.37.76.6 1.06.76 1 1.95 1.44 2.2 2.8.04.14.06.28.06.43.03.82-.32 1.72-.92 2.27h.01z\"/></svg>'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.07 11.25l-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 00-2-2 2 2 0 00-2 2H8a4 4 0 014-4 4 4 0 014 4 3.2 3.2 0 01-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10c0-5.53-4.5-10-10-10z\"/></svg>'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 14h-2v-4h2m0 8h-2v-2h2M1 21h22L12 2 1 21z\"/></svg>'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2c5.53 0 10 4.47 10 10s-4.47 10-10 10S2 17.53 2 12 6.47 2 12 2m3.59 5L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41 15.59 7z\"/></svg>'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M11.5 20l4.86-9.73H13V4l-5 9.73h3.5V20M12 2c2.75 0 5.1 1 7.05 2.95C21 6.9 22 9.25 22 12s-1 5.1-2.95 7.05C17.1 21 14.75 22 12 22s-5.1-1-7.05-2.95C3 17.1 2 14.75 2 12s1-5.1 2.95-7.05C6.9 3 9.25 2 12 2z\"/></svg>')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.1)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.1)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.1\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-secondary);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// <debugging things>\n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// </debugging things>\n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$full-width: $content-width + 2 * ($content-padding + $sidebar-width);\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\np.admonition-title, p.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\n // Break words when they're too long\n span.pre\n overflow-wrap: anywhere\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n p &\n border: 1px solid var(--color-background-border)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n overflow: auto\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n font-weight: 500\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","//\n// Search Page Listing\n//\nul.search\n padding-left: 0\n list-style: none\n\n li\n padding: 1rem 0\n border-bottom: 1px solid var(--color-background-border)\n\n//\n// Highlighted by links in search page\n//\n[role=main] .highlighted\n background-color: var(--color-highlighted-background)\n color: var(--color-highlighted-text)\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,<svg width=\"12\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"%23607D8B\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\"/><path d=\"M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5\" /><line x1=\"10\" y1=\"14\" x2=\"20\" y2=\"4\" /><polyline points=\"15 4 20 4 20 9\" /></svg>')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the <label>\n li.has-children\n > .reference\n padding-right: var(--sidebar-expander-width)\n\n // Colorize the top-level list items and icon.\n .toctree-l1\n & > .reference,\n & > label .icon\n color: var(--color-sidebar-link-text--top-level)\n\n // Color changes on hover\n label\n background: var(--color-sidebar-item-expander-background)\n &:hover\n background: var(--color-sidebar-item-expander-background--hover)\n\n .current > .reference\n background: var(--color-sidebar-item-background--current)\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n.toctree-checkbox\n position: absolute\n display: none\n\n////////////////////////////////////////////////////////////////////////////////\n// Togglable expand/collapse\n////////////////////////////////////////////////////////////////////////////////\n.toctree-checkbox\n ~ ul\n display: none\n\n ~ label .icon svg\n transform: rotate(90deg)\n\n.toctree-checkbox:checked\n ~ ul\n display: block\n\n ~ label .icon svg\n transform: rotate(-90deg)\n","// This file contains the styles for the contents of the right sidebar, which\n// contains the table of contents for the current page.\n.toc-title-container\n padding: var(--toc-title-padding)\n padding-top: var(--toc-spacing-vertical)\n\n.toc-title\n color: var(--color-toc-title-text)\n font-size: var(--toc-title-font-size)\n padding-left: var(--toc-spacing-horizontal)\n text-transform: uppercase\n\n// If the ToC is not present, hide these elements coz they're not relevant.\n.no-toc\n display: none\n\n.toc-tree-container\n padding-bottom: var(--toc-spacing-vertical)\n\n.toc-tree\n font-size: var(--toc-font-size)\n line-height: 1.3\n border-left: 1px solid var(--color-background-border)\n\n padding-left: calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))\n\n // Hide the first \"top level\" bullet.\n > ul > li:first-child\n padding-top: 0\n & > ul\n padding-left: 0\n & > a\n display: none\n\n ul\n list-style-type: none\n margin-top: 0\n margin-bottom: 0\n padding-left: var(--toc-item-spacing-horizontal)\n li\n padding-top: var(--toc-item-spacing-vertical)\n\n &.scroll-current >.reference\n color: var(--color-toc-item-text--active)\n font-weight: bold\n\n .reference\n color: var(--color-toc-item-text)\n text-decoration: none\n overflow-wrap: anywhere\n\n.toc-scroll\n max-height: 100vh\n overflow-y: scroll\n\n// Be very annoying when someone includes the table of contents\n.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here)\n color: var(--color-problematic)\n background: rgba(255, 0, 0, 0.25)\n &::before\n content: \"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch.\"\n","// Shameful hacks, to work around bugs.\n\n// MyST parser doesn't correctly generate classes, to align table contents.\n// https://github.com/executablebooks/MyST-Parser/issues/412\n.text-align\\:left > p\n text-align: left\n\n.text-align\\:center > p\n text-align: center\n\n.text-align\\:right > p\n text-align: right\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/docs/manual/examples.html b/docs/manual/examples.html
index 55fb51a0..63a2b824 100644
--- a/docs/manual/examples.html
+++ b/docs/manual/examples.html
@@ -1,55 +1,232 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Support Reticulum" href="support.html" /><link rel="prev" title="Building Networks" href="networks.html" />
+
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Code Examples - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<!DOCTYPE html>
-
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Code Examples — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="API Reference" href="reference.html" />
- <link rel="prev" title="Building Networks" href="networks.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="reference.html" title="API Reference"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="networks.html" title="Building Networks"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Code Examples</a></li>
- </ul>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="code-examples">
-<span id="examples-main"></span><h1>Code Examples<a class="headerlink" href="#code-examples" title="Permalink to this heading">ΒΆ</a></h1>
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="code-examples">
+<span id="examples-main"></span><h1>Code Examples<a class="headerlink" href="#code-examples" title="Permalink to this heading">#</a></h1>
<p>A number of examples are included in the source distribution of Reticulum.
You can use these examples to learn how to write your own programs.</p>
<section id="minimal">
-<span id="example-minimal"></span><h2>Minimal<a class="headerlink" href="#minimal" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-minimal"></span><h2>Minimal<a class="headerlink" href="#minimal" title="Permalink to this heading">#</a></h2>
<p>The <em>Minimal</em> example demonstrates the bare-minimum setup required to connect to
a Reticulum network from your program. In about five lines of code, you will
have the Reticulum Network Stack initialised, and ready to pass traffic in your
@@ -160,7 +337,7 @@ program.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py</a>.</p>
</section>
<section id="announce">
-<span id="example-announce"></span><h2>Announce<a class="headerlink" href="#announce" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-announce"></span><h2>Announce<a class="headerlink" href="#announce" title="Permalink to this heading">#</a></h2>
<p>The <em>Announce</em> example builds upon the previous example by exploring how to
announce a destination on the network, and how to let your program receive
notifications about announces from relevant destinations.</p>
@@ -339,7 +516,7 @@ notifications about announces from relevant destinations.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py</a>.</p>
</section>
<section id="broadcast">
-<span id="example-broadcast"></span><h2>Broadcast<a class="headerlink" href="#broadcast" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-broadcast"></span><h2>Broadcast<a class="headerlink" href="#broadcast" title="Permalink to this heading">#</a></h2>
<p>The <em>Broadcast</em> example explores how to transmit plaintext broadcast messages
over the network.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@@ -468,7 +645,7 @@ over the network.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py</a>.</p>
</section>
<section id="echo">
-<span id="example-echo"></span><h2>Echo<a class="headerlink" href="#echo" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-echo"></span><h2>Echo<a class="headerlink" href="#echo" title="Permalink to this heading">#</a></h2>
<p>The <em>Echo</em> example demonstrates communication between two destinations using
the Packet interface.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@@ -806,7 +983,7 @@ the Packet interface.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py</a>.</p>
</section>
<section id="link">
-<span id="example-link"></span><h2>Link<a class="headerlink" href="#link" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-link"></span><h2>Link<a class="headerlink" href="#link" title="Permalink to this heading">#</a></h2>
<p>The <em>Link</em> example explores establishing an encrypted link to a remote
destination, and passing traffic back and forth over the link.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@@ -1105,7 +1282,7 @@ destination, and passing traffic back and forth over the link.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py</a>.</p>
</section>
<section id="example-identify">
-<span id="identification"></span><h2>Identification<a class="headerlink" href="#example-identify" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="identification"></span><h2>Identification<a class="headerlink" href="#example-identify" title="Permalink to this heading">#</a></h2>
<p>The <em>Identify</em> example explores identifying an intiator of a link, once
the link has been established.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@@ -1427,7 +1604,7 @@ the link has been established.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py</a>.</p>
</section>
<section id="requests-responses">
-<span id="example-request"></span><h2>Requests & Responses<a class="headerlink" href="#requests-responses" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-request"></span><h2>Requests & Responses<a class="headerlink" href="#requests-responses" title="Permalink to this heading">#</a></h2>
<p>The <em>Request</em> example explores sendig requests and receiving responses.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
<span class="c1"># This RNS example demonstrates how to set perform #</span>
@@ -1721,7 +1898,7 @@ the link has been established.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py</a>.</p>
</section>
<section id="filetransfer">
-<span id="example-filetransfer"></span><h2>Filetransfer<a class="headerlink" href="#filetransfer" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="example-filetransfer"></span><h2>Filetransfer<a class="headerlink" href="#filetransfer" title="Permalink to this heading">#</a></h2>
<p>The <em>Filetransfer</em> example implements a basic file-server program that
allow clients to connect and download files. The program uses the Resource
interface to efficiently pass files of any size over a Reticulum <a class="reference internal" href="reference.html#api-link"><span class="std std-ref">Link</span></a>.</p>
@@ -2336,16 +2513,62 @@ interface to efficiently pass files of any size over a Reticulum <a class="refer
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="support.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Support Reticulum</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="networks.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Building Networks</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Code Examples</a><ul>
<li><a class="reference internal" href="#minimal">Minimal</a></li>
<li><a class="reference internal" href="#announce">Announce</a></li>
@@ -2359,57 +2582,21 @@ interface to efficiently pass files of any size over a Reticulum <a class="refer
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="networks.html"
- title="previous chapter">Building Networks</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="reference.html"
- title="next chapter">API Reference</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/examples.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="reference.html" title="API Reference"
- >next</a> |</li>
- <li class="right" >
- <a href="networks.html" title="Building Networks"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Code Examples</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/genindex.html b/docs/manual/genindex.html
index 97472732..08f3cc2b 100644
--- a/docs/manual/genindex.html
+++ b/docs/manual/genindex.html
@@ -1,454 +1,660 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" />
+
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/><title>Index - Reticulum Network Stack 0.3.12 beta documentation</title>
+<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Index — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="#" />
- <link rel="search" title="Search" href="search.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="#" title="General Index"
- accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Index</a></li>
- </ul>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
-<h1 id="index">Index</h1>
-
-<div class="genindex-jumpbox">
- <a href="#A"><strong>A</strong></a>
- | <a href="#C"><strong>C</strong></a>
- | <a href="#D"><strong>D</strong></a>
- | <a href="#E"><strong>E</strong></a>
- | <a href="#F"><strong>F</strong></a>
- | <a href="#G"><strong>G</strong></a>
- | <a href="#H"><strong>H</strong></a>
- | <a href="#I"><strong>I</strong></a>
- | <a href="#K"><strong>K</strong></a>
- | <a href="#L"><strong>L</strong></a>
- | <a href="#M"><strong>M</strong></a>
- | <a href="#N"><strong>N</strong></a>
- | <a href="#P"><strong>P</strong></a>
- | <a href="#R"><strong>R</strong></a>
- | <a href="#S"><strong>S</strong></a>
- | <a href="#T"><strong>T</strong></a>
- | <a href="#V"><strong>V</strong></a>
-
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul>
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
</div>
-<h2 id="A">A</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Destination.accepts_links">accepts_links() (RNS.Destination method)</a>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+
+<section class="genindex-section">
+ <h1 id="index">Index</h1>
+ <div class="genindex-jumpbox"><a href="#A"><strong>A</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#F"><strong>F</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#H"><strong>H</strong></a> | <a href="#I"><strong>I</strong></a> | <a href="#K"><strong>K</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#N"><strong>N</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a> | <a href="#V"><strong>V</strong></a></div>
+</section>
+<section id="A" class="genindex-section">
+ <h2>A</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Destination.accepts_links">accepts_links() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Resource.advertise">advertise() (RNS.Resource method)</a>
+ <li><a href="reference.html#RNS.Resource.advertise">advertise() (RNS.Resource method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Destination.announce">announce() (RNS.Destination method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Destination.announce">announce() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Reticulum.ANNOUNCE_CAP">ANNOUNCE_CAP (RNS.Reticulum attribute)</a>
+ <li><a href="reference.html#RNS.Reticulum.ANNOUNCE_CAP">ANNOUNCE_CAP (RNS.Reticulum attribute)</a>
</li>
- <li><a href="reference.html#RNS.Destination.app_and_aspects_from_name">app_and_aspects_from_name() (RNS.Destination static method)</a>
+ <li><a href="reference.html#RNS.Destination.app_and_aspects_from_name">app_and_aspects_from_name() (RNS.Destination static method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="C">C</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Resource.cancel">cancel() (RNS.Resource method)</a>
+<section id="C" class="genindex-section">
+ <h2>C</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Resource.cancel">cancel() (RNS.Resource method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.clear_default_app_data">clear_default_app_data() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.clear_default_app_data">clear_default_app_data() (RNS.Destination method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Destination.create_keys">create_keys() (RNS.Destination method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Destination.create_keys">create_keys() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.CURVE">CURVE (RNS.Identity attribute)</a>
+ <li><a href="reference.html#RNS.Identity.CURVE">CURVE (RNS.Identity attribute)</a>
- <ul>
- <li><a href="reference.html#RNS.Link.CURVE">(RNS.Link attribute)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Link.CURVE">(RNS.Link attribute)</a>
</li>
- </ul></li>
- </ul></td>
-</tr></table>
+ </ul></li>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="D">D</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Destination.decrypt">decrypt() (RNS.Destination method)</a>
+<section id="D" class="genindex-section">
+ <h2>D</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Destination.decrypt">decrypt() (RNS.Destination method)</a>
- <ul>
- <li><a href="reference.html#RNS.Identity.decrypt">(RNS.Identity method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Identity.decrypt">(RNS.Identity method)</a>
</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Transport.deregister_announce_handler">deregister_announce_handler() (RNS.Transport static method)</a>
+ </ul></li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Transport.deregister_announce_handler">deregister_announce_handler() (RNS.Transport static method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.deregister_request_handler">deregister_request_handler() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.deregister_request_handler">deregister_request_handler() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Destination">Destination (class in RNS)</a>
+ <li><a href="reference.html#RNS.Destination">Destination (class in RNS)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="E">E</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Destination.encrypt">encrypt() (RNS.Destination method)</a>
+<section id="E" class="genindex-section">
+ <h2>E</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Destination.encrypt">encrypt() (RNS.Destination method)</a>
- <ul>
- <li><a href="reference.html#RNS.Identity.encrypt">(RNS.Identity method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Identity.encrypt">(RNS.Identity method)</a>
</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Packet.ENCRYPTED_MDU">ENCRYPTED_MDU (RNS.Packet attribute)</a>
+ </ul></li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Packet.ENCRYPTED_MDU">ENCRYPTED_MDU (RNS.Packet attribute)</a>
</li>
- <li><a href="reference.html#RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP">ESTABLISHMENT_TIMEOUT_PER_HOP (RNS.Link attribute)</a>
+ <li><a href="reference.html#RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP">ESTABLISHMENT_TIMEOUT_PER_HOP (RNS.Link attribute)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="F">F</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Identity.from_bytes">from_bytes() (RNS.Identity static method)</a>
+<section id="F" class="genindex-section">
+ <h2>F</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Identity.from_bytes">from_bytes() (RNS.Identity static method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.from_file">from_file() (RNS.Identity static method)</a>
+ <li><a href="reference.html#RNS.Identity.from_file">from_file() (RNS.Identity static method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Identity.full_hash">full_hash() (RNS.Identity static method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Identity.full_hash">full_hash() (RNS.Identity static method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.full_name">full_name() (RNS.Destination static method)</a>
+ <li><a href="reference.html#RNS.Destination.full_name">full_name() (RNS.Destination static method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="G">G</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Resource.get_data_size">get_data_size() (RNS.Resource method)</a>
+<section id="G" class="genindex-section">
+ <h2>G</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Resource.get_data_size">get_data_size() (RNS.Resource method)</a>
</li>
- <li><a href="reference.html#RNS.Resource.get_hash">get_hash() (RNS.Resource method)</a>
+ <li><a href="reference.html#RNS.Resource.get_hash">get_hash() (RNS.Resource method)</a>
</li>
- <li><a href="reference.html#RNS.Resource.get_parts">get_parts() (RNS.Resource method)</a>
+ <li><a href="reference.html#RNS.Resource.get_parts">get_parts() (RNS.Resource method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.get_private_key">get_private_key() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.get_private_key">get_private_key() (RNS.Destination method)</a>
- <ul>
- <li><a href="reference.html#RNS.Identity.get_private_key">(RNS.Identity method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Identity.get_private_key">(RNS.Identity method)</a>
</li>
- </ul></li>
- <li><a href="reference.html#RNS.RequestReceipt.get_progress">get_progress() (RNS.RequestReceipt method)</a>
+ </ul></li>
+ <li><a href="reference.html#RNS.RequestReceipt.get_progress">get_progress() (RNS.RequestReceipt method)</a>
- <ul>
- <li><a href="reference.html#RNS.Resource.get_progress">(RNS.Resource method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Resource.get_progress">(RNS.Resource method)</a>
</li>
- </ul></li>
- <li><a href="reference.html#RNS.Identity.get_public_key">get_public_key() (RNS.Identity method)</a>
+ </ul></li>
+ <li><a href="reference.html#RNS.Identity.get_public_key">get_public_key() (RNS.Identity method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.get_random_hash">get_random_hash() (RNS.Identity static method)</a>
+ <li><a href="reference.html#RNS.Identity.get_random_hash">get_random_hash() (RNS.Identity static method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.get_remote_identity">get_remote_identity() (RNS.Link method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.get_remote_identity">get_remote_identity() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.RequestReceipt.get_request_id">get_request_id() (RNS.RequestReceipt method)</a>
+ <li><a href="reference.html#RNS.RequestReceipt.get_request_id">get_request_id() (RNS.RequestReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.RequestReceipt.get_response">get_response() (RNS.RequestReceipt method)</a>
+ <li><a href="reference.html#RNS.RequestReceipt.get_response">get_response() (RNS.RequestReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.RequestReceipt.get_response_time">get_response_time() (RNS.RequestReceipt method)</a>
+ <li><a href="reference.html#RNS.RequestReceipt.get_response_time">get_response_time() (RNS.RequestReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.PacketReceipt.get_rtt">get_rtt() (RNS.PacketReceipt method)</a>
+ <li><a href="reference.html#RNS.PacketReceipt.get_rtt">get_rtt() (RNS.PacketReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.Resource.get_segments">get_segments() (RNS.Resource method)</a>
+ <li><a href="reference.html#RNS.Resource.get_segments">get_segments() (RNS.Resource method)</a>
</li>
- <li><a href="reference.html#RNS.PacketReceipt.get_status">get_status() (RNS.PacketReceipt method)</a>
+ <li><a href="reference.html#RNS.PacketReceipt.get_status">get_status() (RNS.PacketReceipt method)</a>
- <ul>
- <li><a href="reference.html#RNS.RequestReceipt.get_status">(RNS.RequestReceipt method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.RequestReceipt.get_status">(RNS.RequestReceipt method)</a>
</li>
- </ul></li>
- <li><a href="reference.html#RNS.Resource.get_transfer_size">get_transfer_size() (RNS.Resource method)</a>
+ </ul></li>
+ <li><a href="reference.html#RNS.Resource.get_transfer_size">get_transfer_size() (RNS.Resource method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="H">H</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Transport.has_path">has_path() (RNS.Transport static method)</a>
+<section id="H" class="genindex-section">
+ <h2>H</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Transport.has_path">has_path() (RNS.Transport static method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.hash">hash() (RNS.Destination static method)</a>
+ <li><a href="reference.html#RNS.Destination.hash">hash() (RNS.Destination static method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Destination.hash_from_name_and_identity">hash_from_name_and_identity() (RNS.Destination static method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Destination.hash_from_name_and_identity">hash_from_name_and_identity() (RNS.Destination static method)</a>
</li>
- <li><a href="reference.html#RNS.Transport.hops_to">hops_to() (RNS.Transport static method)</a>
+ <li><a href="reference.html#RNS.Transport.hops_to">hops_to() (RNS.Transport static method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="I">I</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.identify">identify() (RNS.Link method)</a>
+<section id="I" class="genindex-section">
+ <h2>I</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.identify">identify() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Identity">Identity (class in RNS)</a>
+ <li><a href="reference.html#RNS.Identity">Identity (class in RNS)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.inactive_for">inactive_for() (RNS.Link method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.inactive_for">inactive_for() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Resource.is_compressed">is_compressed() (RNS.Resource method)</a>
+ <li><a href="reference.html#RNS.Resource.is_compressed">is_compressed() (RNS.Resource method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="K">K</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.KEEPALIVE">KEEPALIVE (RNS.Link attribute)</a>
+<section id="K" class="genindex-section">
+ <h2>K</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.KEEPALIVE">KEEPALIVE (RNS.Link attribute)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.KEEPALIVE_TIMEOUT_FACTOR">KEEPALIVE_TIMEOUT_FACTOR (RNS.Link attribute)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.KEEPALIVE_TIMEOUT_FACTOR">KEEPALIVE_TIMEOUT_FACTOR (RNS.Link attribute)</a>
</li>
- <li><a href="reference.html#RNS.Identity.KEYSIZE">KEYSIZE (RNS.Identity attribute)</a>
+ <li><a href="reference.html#RNS.Identity.KEYSIZE">KEYSIZE (RNS.Identity attribute)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="L">L</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link">Link (class in RNS)</a>
+<section id="L" class="genindex-section">
+ <h2>L</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link">Link (class in RNS)</a>
</li>
- <li><a href="reference.html#RNS.Destination.load_private_key">load_private_key() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.load_private_key">load_private_key() (RNS.Destination method)</a>
- <ul>
- <li><a href="reference.html#RNS.Identity.load_private_key">(RNS.Identity method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Identity.load_private_key">(RNS.Identity method)</a>
</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Identity.load_public_key">load_public_key() (RNS.Identity method)</a>
+ </ul></li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Identity.load_public_key">load_public_key() (RNS.Identity method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="M">M</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Reticulum.MTU">MTU (RNS.Reticulum attribute)</a>
+<section id="M" class="genindex-section">
+ <h2>M</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Reticulum.MTU">MTU (RNS.Reticulum attribute)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="N">N</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Transport.next_hop">next_hop() (RNS.Transport static method)</a>
+<section id="N" class="genindex-section">
+ <h2>N</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Transport.next_hop">next_hop() (RNS.Transport static method)</a>
</li>
- <li><a href="reference.html#RNS.Transport.next_hop_interface">next_hop_interface() (RNS.Transport static method)</a>
+ <li><a href="reference.html#RNS.Transport.next_hop_interface">next_hop_interface() (RNS.Transport static method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.no_inbound_for">no_inbound_for() (RNS.Link method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.no_inbound_for">no_inbound_for() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Link.no_outbound_for">no_outbound_for() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.no_outbound_for">no_outbound_for() (RNS.Link method)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="P">P</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Packet">Packet (class in RNS)</a>
+<section id="P" class="genindex-section">
+ <h2>P</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Packet">Packet (class in RNS)</a>
</li>
- <li><a href="reference.html#RNS.PacketReceipt">PacketReceipt (class in RNS)</a>
+ <li><a href="reference.html#RNS.PacketReceipt">PacketReceipt (class in RNS)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Transport.PATHFINDER_M">PATHFINDER_M (RNS.Transport attribute)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Transport.PATHFINDER_M">PATHFINDER_M (RNS.Transport attribute)</a>
</li>
- <li><a href="reference.html#RNS.Packet.PLAIN_MDU">PLAIN_MDU (RNS.Packet attribute)</a>
+ <li><a href="reference.html#RNS.Packet.PLAIN_MDU">PLAIN_MDU (RNS.Packet attribute)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="R">R</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Identity.recall">recall() (RNS.Identity static method)</a>
+<section id="R" class="genindex-section">
+ <h2>R</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Identity.recall">recall() (RNS.Identity static method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.recall_app_data">recall_app_data() (RNS.Identity static method)</a>
+ <li><a href="reference.html#RNS.Identity.recall_app_data">recall_app_data() (RNS.Identity static method)</a>
</li>
- <li><a href="reference.html#RNS.Transport.register_announce_handler">register_announce_handler() (RNS.Transport static method)</a>
+ <li><a href="reference.html#RNS.Transport.register_announce_handler">register_announce_handler() (RNS.Transport static method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.register_request_handler">register_request_handler() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.register_request_handler">register_request_handler() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Link.request">request() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.request">request() (RNS.Link method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Transport.request_path">request_path() (RNS.Transport static method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Transport.request_path">request_path() (RNS.Transport static method)</a>
</li>
- <li><a href="reference.html#RNS.RequestReceipt">RequestReceipt (class in RNS)</a>
+ <li><a href="reference.html#RNS.RequestReceipt">RequestReceipt (class in RNS)</a>
</li>
- <li><a href="reference.html#RNS.Packet.resend">resend() (RNS.Packet method)</a>
+ <li><a href="reference.html#RNS.Packet.resend">resend() (RNS.Packet method)</a>
</li>
- <li><a href="reference.html#RNS.Resource">Resource (class in RNS)</a>
+ <li><a href="reference.html#RNS.Resource">Resource (class in RNS)</a>
</li>
- <li><a href="reference.html#RNS.Reticulum">Reticulum (class in RNS)</a>
+ <li><a href="reference.html#RNS.Reticulum">Reticulum (class in RNS)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="S">S</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Packet.send">send() (RNS.Packet method)</a>
+<section id="S" class="genindex-section">
+ <h2>S</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Packet.send">send() (RNS.Packet method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.set_default_app_data">set_default_app_data() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.set_default_app_data">set_default_app_data() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.PacketReceipt.set_delivery_callback">set_delivery_callback() (RNS.PacketReceipt method)</a>
+ <li><a href="reference.html#RNS.PacketReceipt.set_delivery_callback">set_delivery_callback() (RNS.PacketReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.Link.set_link_closed_callback">set_link_closed_callback() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.set_link_closed_callback">set_link_closed_callback() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.set_link_established_callback">set_link_established_callback() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.set_link_established_callback">set_link_established_callback() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.set_packet_callback">set_packet_callback() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.set_packet_callback">set_packet_callback() (RNS.Destination method)</a>
- <ul>
- <li><a href="reference.html#RNS.Link.set_packet_callback">(RNS.Link method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Link.set_packet_callback">(RNS.Link method)</a>
</li>
- </ul></li>
- <li><a href="reference.html#RNS.Destination.set_proof_requested_callback">set_proof_requested_callback() (RNS.Destination method)</a>
+ </ul></li>
+ <li><a href="reference.html#RNS.Destination.set_proof_requested_callback">set_proof_requested_callback() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.set_proof_strategy">set_proof_strategy() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.set_proof_strategy">set_proof_strategy() (RNS.Destination method)</a>
</li>
- <li><a href="reference.html#RNS.Link.set_remote_identified_callback">set_remote_identified_callback() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.set_remote_identified_callback">set_remote_identified_callback() (RNS.Link method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.set_resource_callback">set_resource_callback() (RNS.Link method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.set_resource_callback">set_resource_callback() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Link.set_resource_concluded_callback">set_resource_concluded_callback() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.set_resource_concluded_callback">set_resource_concluded_callback() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Link.set_resource_started_callback">set_resource_started_callback() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.set_resource_started_callback">set_resource_started_callback() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Link.set_resource_strategy">set_resource_strategy() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Link.set_resource_strategy">set_resource_strategy() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.PacketReceipt.set_timeout">set_timeout() (RNS.PacketReceipt method)</a>
+ <li><a href="reference.html#RNS.PacketReceipt.set_timeout">set_timeout() (RNS.PacketReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.PacketReceipt.set_timeout_callback">set_timeout_callback() (RNS.PacketReceipt method)</a>
+ <li><a href="reference.html#RNS.PacketReceipt.set_timeout_callback">set_timeout_callback() (RNS.PacketReceipt method)</a>
</li>
- <li><a href="reference.html#RNS.Reticulum.should_use_implicit_proof">should_use_implicit_proof() (RNS.Reticulum static method)</a>
+ <li><a href="reference.html#RNS.Reticulum.should_use_implicit_proof">should_use_implicit_proof() (RNS.Reticulum static method)</a>
</li>
- <li><a href="reference.html#RNS.Destination.sign">sign() (RNS.Destination method)</a>
+ <li><a href="reference.html#RNS.Destination.sign">sign() (RNS.Destination method)</a>
- <ul>
- <li><a href="reference.html#RNS.Identity.sign">(RNS.Identity method)</a>
+ <ul>
+ <li><a href="reference.html#RNS.Identity.sign">(RNS.Identity method)</a>
</li>
- </ul></li>
- <li><a href="reference.html#RNS.Link.STALE_GRACE">STALE_GRACE (RNS.Link attribute)</a>
+ </ul></li>
+ <li><a href="reference.html#RNS.Link.STALE_GRACE">STALE_GRACE (RNS.Link attribute)</a>
</li>
- <li><a href="reference.html#RNS.Link.STALE_TIME">STALE_TIME (RNS.Link attribute)</a>
+ <li><a href="reference.html#RNS.Link.STALE_TIME">STALE_TIME (RNS.Link attribute)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="T">T</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.teardown">teardown() (RNS.Link method)</a>
+<section id="T" class="genindex-section">
+ <h2>T</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Link.teardown">teardown() (RNS.Link method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.to_file">to_file() (RNS.Identity method)</a>
+ <li><a href="reference.html#RNS.Identity.to_file">to_file() (RNS.Identity method)</a>
</li>
- <li><a href="reference.html#RNS.Transport">Transport (class in RNS)</a>
+ <li><a href="reference.html#RNS.Transport">Transport (class in RNS)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Reticulum.transport_enabled">transport_enabled() (RNS.Reticulum static method)</a>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Reticulum.transport_enabled">transport_enabled() (RNS.Reticulum static method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.truncated_hash">truncated_hash() (RNS.Identity static method)</a>
+ <li><a href="reference.html#RNS.Identity.truncated_hash">truncated_hash() (RNS.Identity static method)</a>
</li>
- <li><a href="reference.html#RNS.Identity.TRUNCATED_HASHLENGTH">TRUNCATED_HASHLENGTH (RNS.Identity attribute)</a>
+ <li><a href="reference.html#RNS.Identity.TRUNCATED_HASHLENGTH">TRUNCATED_HASHLENGTH (RNS.Identity attribute)</a>
</li>
- </ul></td>
-</tr></table>
+ </ul></td>
+ </tr></table>
+</section>
-<h2 id="V">V</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Identity.validate">validate() (RNS.Identity method)</a>
+<section id="V" class="genindex-section">
+ <h2>V</h2>
+ <table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Identity.validate">validate() (RNS.Identity method)</a>
</li>
- </ul></td>
-</tr></table>
-
+ </ul></td>
+ </tr></table>
+</section>
- <div class="clearer"></div>
- </div>
- </div>
+ </article>
</div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ <footer>
+
+ <div class="related-pages">
+
+
</div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="#" title="General Index"
- >index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Index</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
+ </div>
+ </div>
+
+ </footer>
</div>
- </body>
+ <aside class="toc-drawer no-toc">
+
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html
index 07b78b64..a026b018 100644
--- a/docs/manual/gettingstartedfast.html
+++ b/docs/manual/gettingstartedfast.html
@@ -1,56 +1,233 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Using Reticulum on Your System" href="using.html" /><link rel="prev" title="What is Reticulum?" href="whatis.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Getting Started Fast - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Getting Started Fast — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Using Reticulum on Your System" href="using.html" />
- <link rel="prev" title="What is Reticulum?" href="whatis.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="using.html" title="Using Reticulum on Your System"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="whatis.html" title="What is Reticulum?"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Getting Started Fast</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="getting-started-fast">
-<h1>Getting Started Fast<a class="headerlink" href="#getting-started-fast" title="Permalink to this heading">ΒΆ</a></h1>
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="getting-started-fast">
+<h1>Getting Started Fast<a class="headerlink" href="#getting-started-fast" title="Permalink to this heading">#</a></h1>
<p>The best way to get started with the Reticulum Network Stack depends on what
you want to do. This guide will outline sensible starting paths for different
scenarios.</p>
<section id="try-using-a-reticulum-based-program">
-<h2>Try Using a Reticulum-based Program<a class="headerlink" href="#try-using-a-reticulum-based-program" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Try Using a Reticulum-based Program<a class="headerlink" href="#try-using-a-reticulum-based-program" title="Permalink to this heading">#</a></h2>
<p>If you simply want to try using a program built with Reticulum, a few different
programs exist that allow basic communication and a range of other useful functions
over even extremely low-bandwidth Reticulum networks.</p>
@@ -62,7 +239,7 @@ transceivers or infrastructure just to try it out. Launching the programs on sep
devices connected to the same WiFi network is enough to get started, and physical
radio interfaces can then be added later.</p>
<section id="nomad-network">
-<h3>Nomad Network<a class="headerlink" href="#nomad-network" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Nomad Network<a class="headerlink" href="#nomad-network" title="Permalink to this heading">#</a></h3>
<p>The terminal-based program <a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a>
provides a complete encrypted communications suite built with Reticulum. It features
encrypted messaging (both direct and delayed-delivery for offline users), file sharing,
@@ -86,7 +263,7 @@ available. If you get a βcommand not foundβ error or similar when running th
program, reboot your system and try again.</p>
</section>
<section id="sideband">
-<h3>Sideband<a class="headerlink" href="#sideband" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Sideband<a class="headerlink" href="#sideband" title="Permalink to this heading">#</a></h3>
<p>If you would rather use a program with a graphical user interface, you can take
a look at <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>, which is available for Android,
Linux and macOS.</p>
@@ -96,7 +273,7 @@ communication features, and interoperates with Nomad Network, or any other LXMF
</section>
</section>
<section id="using-the-included-utilities">
-<h2>Using the Included Utilities<a class="headerlink" href="#using-the-included-utilities" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Using the Included Utilities<a class="headerlink" href="#using-the-included-utilities" title="Permalink to this heading">#</a></h2>
<p>Reticulum comes with a range of included utilities that make it easier to
manage your network, check connectivity and make Reticulum available to other
programs on your system.</p>
@@ -107,7 +284,7 @@ network status and connectivity.</p>
<a class="reference internal" href="using.html#using-main"><span class="std std-ref">Using Reticulum on Your System</span></a> chapter of this manual.</p>
</section>
<section id="creating-a-network-with-reticulum">
-<h2>Creating a Network With Reticulum<a class="headerlink" href="#creating-a-network-with-reticulum" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Creating a Network With Reticulum<a class="headerlink" href="#creating-a-network-with-reticulum" title="Permalink to this heading">#</a></h2>
<p>To create a network, you will need to specify one or more <em>interfaces</em> for
Reticulum to use. This is done in the Reticulum configuration file, which by
default is located at <code class="docutils literal notranslate"><span class="pre">~/.config/reticulum/config</span></code>. You can edit this file by hand,
@@ -136,7 +313,7 @@ you want more information, you can read the <a class="reference internal" href="
and <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapters of this manual.</p>
</section>
<section id="connecting-reticulum-instances-over-the-internet">
-<h2>Connecting Reticulum Instances Over the Internet<a class="headerlink" href="#connecting-reticulum-instances-over-the-internet" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Connecting Reticulum Instances Over the Internet<a class="headerlink" href="#connecting-reticulum-instances-over-the-internet" title="Permalink to this heading">#</a></h2>
<p>Reticulum currently offers two interfaces suitable for connecting instances over the Internet: <a class="reference internal" href="interfaces.html#interfaces-tcps"><span class="std std-ref">TCP</span></a>
and <a class="reference internal" href="interfaces.html#interfaces-i2p"><span class="std std-ref">I2P</span></a>. Each interface offers a different set of features, and Reticulum
users should carefully choose the interface which best suites their needs.</p>
@@ -164,7 +341,7 @@ instance, while preserving anonymity. If you care more about performance, and a
easier setup, use TCP.</p>
</section>
<section id="connect-to-the-public-testnet">
-<h2>Connect to the Public Testnet<a class="headerlink" href="#connect-to-the-public-testnet" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Connect to the Public Testnet<a class="headerlink" href="#connect-to-the-public-testnet" title="Permalink to this heading">#</a></h2>
<p>An experimental public testnet has been made accessible over both I2P and TCP. You can join it
by adding one of the following interfaces to your <code class="docutils literal notranslate"><span class="pre">.reticulum/config</span></code> file:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># TCP/IP interface to the Dublin hub</span>
@@ -194,7 +371,7 @@ topography, usage or what types of instances connect. It will also occasionally
to test various failure scenarios, and there are no availability or service guarantees.</p>
</section>
<section id="adding-radio-interfaces">
-<h2>Adding Radio Interfaces<a class="headerlink" href="#adding-radio-interfaces" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Adding Radio Interfaces<a class="headerlink" href="#adding-radio-interfaces" title="Permalink to this heading">#</a></h2>
<p>Once you have Reticulum installed and working, you can add radio interfaces with
any compatible hardware you have available. Reticulum supports a wide range of radio
hardware, and if you already have any available, it is very likely that it will
@@ -220,7 +397,7 @@ you are welcome to head over to the <a class="reference external" href="https://
and propose adding an interface for the hardware.</p>
</section>
<section id="develop-a-program-with-reticulum">
-<h2>Develop a Program with Reticulum<a class="headerlink" href="#develop-a-program-with-reticulum" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Develop a Program with Reticulum<a class="headerlink" href="#develop-a-program-with-reticulum" title="Permalink to this heading">#</a></h2>
<p>If you want to develop programs that use Reticulum, the easiest way to get
started is to install the latest release of Reticulum via pip:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip3</span> <span class="n">install</span> <span class="n">rns</span>
@@ -236,7 +413,7 @@ likely be to look at some <a class="reference internal" href="examples.html#exam
<p>Further information can be found in the <a class="reference internal" href="reference.html#api-main"><span class="std std-ref">API Reference</span></a>.</p>
</section>
<section id="participate-in-reticulum-development">
-<h2>Participate in Reticulum Development<a class="headerlink" href="#participate-in-reticulum-development" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Participate in Reticulum Development<a class="headerlink" href="#participate-in-reticulum-development" title="Permalink to this heading">#</a></h2>
<p>If you want to participate in the development of Reticulum and associated
utilities, youβll want to get the latest source from GitHub. In that case,
donβt use pip, but try this recipe:</p>
@@ -276,7 +453,7 @@ donβt use pip, but try this recipe:</p>
<a class="reference internal" href="understanding.html#understanding-main"><span class="std std-ref">Understanding Reticulum</span></a> chapter.</p>
</section>
<section id="reticulum-on-arm64">
-<h2>Reticulum on ARM64<a class="headerlink" href="#reticulum-on-arm64" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Reticulum on ARM64<a class="headerlink" href="#reticulum-on-arm64" title="Permalink to this heading">#</a></h2>
<p>On some architectures, including ARM64, not all dependencies have precompiled
binaries. On such systems, you will need to install <code class="docutils literal notranslate"><span class="pre">python3-dev</span></code> before
installing Reticulum or programs that depend on Reticulum.</p>
@@ -290,7 +467,7 @@ installing Reticulum or programs that depend on Reticulum.</p>
</div>
</section>
<section id="reticulum-on-android">
-<h2>Reticulum on Android<a class="headerlink" href="#reticulum-on-android" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Reticulum on Android<a class="headerlink" href="#reticulum-on-android" title="Permalink to this heading">#</a></h2>
<p>Reticulum can be used on Android in different ways. The easiest way to get
started is using an app like <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>.</p>
<p>For more control and features, you can use Reticulum and related programs via
@@ -332,7 +509,7 @@ Android APKs. A detailed tutorial and example source code will be included
here at a later point.</p>
</section>
<section id="pure-python-reticulum">
-<h2>Pure-Python Reticulum<a class="headerlink" href="#pure-python-reticulum" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Pure-Python Reticulum<a class="headerlink" href="#pure-python-reticulum" title="Permalink to this heading">#</a></h2>
<p>In some rare cases, and on more obscure system types, it is not possible to
install one or more dependencies</p>
<p>On more unusual systems, and in some rare cases, it might not be possible to
@@ -354,16 +531,62 @@ section of this manual.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="using.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Using Reticulum on Your System</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="whatis.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">What is Reticulum?</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Getting Started Fast</a><ul>
<li><a class="reference internal" href="#try-using-a-reticulum-based-program">Try Using a Reticulum-based Program</a><ul>
<li><a class="reference internal" href="#nomad-network">Nomad Network</a></li>
@@ -384,57 +607,21 @@ section of this manual.</p>
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="whatis.html"
- title="previous chapter">What is Reticulum?</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="using.html"
- title="next chapter">Using Reticulum on Your System</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/gettingstartedfast.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="using.html" title="Using Reticulum on Your System"
- >next</a> |</li>
- <li class="right" >
- <a href="whatis.html" title="What is Reticulum?"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Getting Started Fast</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/hardware.html b/docs/manual/hardware.html
index e213462d..b1464b7a 100644
--- a/docs/manual/hardware.html
+++ b/docs/manual/hardware.html
@@ -1,51 +1,228 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Supported Interfaces" href="interfaces.html" /><link rel="prev" title="Understanding Reticulum" href="understanding.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Communications Hardware - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Communications Hardware — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Supported Interfaces" href="interfaces.html" />
- <link rel="prev" title="Understanding Reticulum" href="understanding.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="interfaces.html" title="Supported Interfaces"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="understanding.html" title="Understanding Reticulum"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Communications Hardware</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="communications-hardware">
-<span id="hardware-main"></span><h1>Communications Hardware<a class="headerlink" href="#communications-hardware" title="Permalink to this heading">ΒΆ</a></h1>
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="communications-hardware">
+<span id="hardware-main"></span><h1>Communications Hardware<a class="headerlink" href="#communications-hardware" title="Permalink to this heading">#</a></h1>
<p>One of the truly valuable aspects of Reticulum is the ability to use it over
almost any conceivable kind of communications medium. The <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">interface types</span></a>
available for configuration in Reticulum are flexible enough to cover the use
@@ -68,7 +245,7 @@ and effort. Two fundamental devices categories will be covered, <em>RNodes</em>
networks, knowing how to employ just these two will make it possible to build
a wide range of useful networks with little effort.</p>
<section id="rnode">
-<span id="rnode-main"></span><h2>RNode<a class="headerlink" href="#rnode" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="rnode-main"></span><h2>RNode<a class="headerlink" href="#rnode" title="Permalink to this heading">#</a></h2>
<p>Reliable and general-purpose long-range digital radio transceiver systems are
commonly either very expensive, difficult to set up and operate, hard to source,
power-hungry, or all of the above at the same time. In an attempt to alleviate
@@ -87,7 +264,7 @@ used for centrally controlled IoT devices. RNodes use <em>raw LoRa modulation</e
any additional protocol overhead. All high-level protocol functionality is handled
directly by Reticulum.</p>
<section id="creating-rnodes">
-<span id="rnode-creating"></span><h3>Creating RNodes<a class="headerlink" href="#creating-rnodes" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="rnode-creating"></span><h3>Creating RNodes<a class="headerlink" href="#creating-rnodes" title="Permalink to this heading">#</a></h3>
<p>RNode has been designed as a system that is easy to replicate across time and
space. You can put together a functioning transceiver using commonly available
components, and a few open source software tools. While you can design and build RNodes
@@ -104,11 +281,11 @@ The device can be used with Reticulum by adding an <a class="reference internal"
to the configuration.</p>
</section>
<section id="supported-boards">
-<span id="rnode-supported"></span><h3>Supported Boards<a class="headerlink" href="#supported-boards" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="rnode-supported"></span><h3>Supported Boards<a class="headerlink" href="#supported-boards" title="Permalink to this heading">#</a></h3>
<p>To create one or more RNodes, you will need to obtain supported development
boards. The following boards are supported by the auto-installer.</p>
<section id="lilygo-lora32-v2-1">
-<h4>LilyGO LoRa32 v2.1<a class="headerlink" href="#lilygo-lora32-v2-1" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>LilyGO LoRa32 v2.1<a class="headerlink" href="#lilygo-lora32-v2-1" title="Permalink to this heading">#</a></h4>
<a class="reference internal image-reference" href="_images/board_t3v21.png"><img alt="_images/board_t3v21.png" class="align-center" src="_images/board_t3v21.png" style="width: 46%;" /></a>
<ul class="simple">
<li><p><strong>Supported Firmware Lines</strong> v1.x & v2.x</p></li>
@@ -118,7 +295,7 @@ boards. The following boards are supported by the auto-installer.</p>
</ul>
</section>
<section id="lilygo-lora32-v2-0">
-<h4>LilyGO LoRa32 v2.0<a class="headerlink" href="#lilygo-lora32-v2-0" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>LilyGO LoRa32 v2.0<a class="headerlink" href="#lilygo-lora32-v2-0" title="Permalink to this heading">#</a></h4>
<a class="reference internal image-reference" href="_images/board_t3v20.png"><img alt="_images/board_t3v20.png" class="align-center" src="_images/board_t3v20.png" style="width: 46%;" /></a>
<ul class="simple">
<li><p><strong>Supported Firmware Lines</strong> v1.x & v2.x</p></li>
@@ -128,7 +305,7 @@ boards. The following boards are supported by the auto-installer.</p>
</ul>
</section>
<section id="lilygo-t-beam">
-<h4>LilyGO T-Beam<a class="headerlink" href="#lilygo-t-beam" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>LilyGO T-Beam<a class="headerlink" href="#lilygo-t-beam" title="Permalink to this heading">#</a></h4>
<a class="reference internal image-reference" href="_images/board_tbeam.png"><img alt="_images/board_tbeam.png" class="align-center" src="_images/board_tbeam.png" style="width: 75%;" /></a>
<ul class="simple">
<li><p><strong>Supported Firmware Lines</strong> v1.x & v2.x</p></li>
@@ -138,7 +315,7 @@ boards. The following boards are supported by the auto-installer.</p>
</ul>
</section>
<section id="heltec-lora32-v2-0">
-<h4>Heltec LoRa32 v2.0<a class="headerlink" href="#heltec-lora32-v2-0" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>Heltec LoRa32 v2.0<a class="headerlink" href="#heltec-lora32-v2-0" title="Permalink to this heading">#</a></h4>
<a class="reference internal image-reference" href="_images/board_heltec32.png"><img alt="_images/board_heltec32.png" class="align-center" src="_images/board_heltec32.png" style="width: 58%;" /></a>
<ul class="simple">
<li><p><strong>Supported Firmware Lines</strong> v1.x & v2.x</p></li>
@@ -148,7 +325,7 @@ boards. The following boards are supported by the auto-installer.</p>
</ul>
</section>
<section id="unsigned-rnode-v2-x">
-<h4>Unsigned RNode v2.x<a class="headerlink" href="#unsigned-rnode-v2-x" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>Unsigned RNode v2.x<a class="headerlink" href="#unsigned-rnode-v2-x" title="Permalink to this heading">#</a></h4>
<a class="reference internal image-reference" href="_images/board_rnodev2.png"><img alt="_images/board_rnodev2.png" class="align-center" src="_images/board_rnodev2.png" style="width: 58%;" /></a>
<ul class="simple">
<li><p><strong>Supported Firmware Lines</strong> v1.x & v2.x</p></li>
@@ -158,7 +335,7 @@ boards. The following boards are supported by the auto-installer.</p>
</ul>
</section>
<section id="unsigned-rnode-v1-x">
-<h4>Unsigned RNode v1.x<a class="headerlink" href="#unsigned-rnode-v1-x" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>Unsigned RNode v1.x<a class="headerlink" href="#unsigned-rnode-v1-x" title="Permalink to this heading">#</a></h4>
<a class="reference internal image-reference" href="_images/board_rnode.png"><img alt="_images/board_rnode.png" class="align-center" src="_images/board_rnode.png" style="width: 50%;" /></a>
<ul class="simple">
<li><p><strong>Supported Firmware Lines</strong> v1.x</p></li>
@@ -169,7 +346,7 @@ boards. The following boards are supported by the auto-installer.</p>
</section>
</section>
<section id="installation">
-<span id="rnode-installation"></span><h3>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="rnode-installation"></span><h3>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">#</a></h3>
<p>Once you have obtained compatible boards, you can install the <a class="reference external" href="https://github.com/markqvist/RNode_Firmware">RNode Firmware</a>
using the <a class="reference external" href="https://github.com/markqvist/rnodeconfigutil">RNode Configuration Utility</a>.
Make sure that <code class="docutils literal notranslate"><span class="pre">Python3</span></code> and <code class="docutils literal notranslate"><span class="pre">pip</span></code> is installed on your system, and then install
@@ -191,7 +368,7 @@ considered an experimental pre-release. Only use the v2.x firmware line if you w
out the absolutely newest version, and donβt care about stability.</p>
</section>
<section id="usage-with-reticulum">
-<span id="rnode-usage"></span><h3>Usage with Reticulum<a class="headerlink" href="#usage-with-reticulum" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="rnode-usage"></span><h3>Usage with Reticulum<a class="headerlink" href="#usage-with-reticulum" title="Permalink to this heading">#</a></h3>
<p>When the devices have been installed and provisioned, you can use them with Reticulum
by adding the <a class="reference internal" href="interfaces.html#interfaces-rnode"><span class="std std-ref">relevant interface section</span></a> to the configuration
file of Reticulum. For v1.x firmwares, you will have to specify all interface parameters,
@@ -200,13 +377,13 @@ the Connection ID of the RNode, and Reticulum will automatically locate and conn
RNode, using the parameters stored in the RNode itself.</p>
</section>
<section id="suppliers">
-<span id="rnode-suppliers"></span><h3>Suppliers<a class="headerlink" href="#suppliers" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="rnode-suppliers"></span><h3>Suppliers<a class="headerlink" href="#suppliers" title="Permalink to this heading">#</a></h3>
<p>Get in touch if you want to have your RNode supplier listed here, or if you want help to
get started with producing RNodes.</p>
</section>
</section>
<section id="wifi-based-hardware">
-<h2>WiFi-based Hardware<a class="headerlink" href="#wifi-based-hardware" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>WiFi-based Hardware<a class="headerlink" href="#wifi-based-hardware" title="Permalink to this heading">#</a></h2>
<p>It is possible to use all kinds of both short- and long-range WiFi-based hardware
with Reticulum. Any kind of hardware that fully supports bridged Ethernet over the
WiFi interface will work with the <a class="reference internal" href="interfaces.html#interfaces-auto"><span class="std std-ref">AutoInterface</span></a> in Reticulum.
@@ -230,7 +407,7 @@ networks. As in all other cases, it is also possible for Reticulum to co-exist w
networks running concurrently on such devices.</p>
</section>
<section id="combining-hardware-types">
-<h2>Combining Hardware Types<a class="headerlink" href="#combining-hardware-types" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Combining Hardware Types<a class="headerlink" href="#combining-hardware-types" title="Permalink to this heading">#</a></h2>
<p>It is useful to combine different link and hardware types when designing and
building a network. One useful design pattern is to employ high-capacity point-to-point
links based on WiFi or millimeter-wave radios (with high-gain directional antennas)
@@ -239,16 +416,62 @@ connectivity for client devices.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="interfaces.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Supported Interfaces</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="understanding.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Understanding Reticulum</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Communications Hardware</a><ul>
<li><a class="reference internal" href="#rnode">RNode</a><ul>
<li><a class="reference internal" href="#creating-rnodes">Creating RNodes</a></li>
@@ -272,57 +495,21 @@ connectivity for client devices.</p>
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="understanding.html"
- title="previous chapter">Understanding Reticulum</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="interfaces.html"
- title="next chapter">Supported Interfaces</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/hardware.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="interfaces.html" title="Supported Interfaces"
- >next</a> |</li>
- <li class="right" >
- <a href="understanding.html" title="Understanding Reticulum"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Communications Hardware</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/index.html b/docs/manual/index.html
index 0a0d72c1..a553a4ce 100644
--- a/docs/manual/index.html
+++ b/docs/manual/index.html
@@ -1,50 +1,234 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="What is Reticulum?" href="whatis.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Reticulum Network Stack Manual — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="What is Reticulum?" href="whatis.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="whatis.html" title="What is Reticulum?"
- accesskey="N">next</a> |</li>
- <li class="nav-item nav-item-0"><a href="#">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Reticulum Network Stack Manual</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="reticulum-network-stack-manual">
-<h1>Reticulum Network Stack Manual<a class="headerlink" href="#reticulum-network-stack-manual" title="Permalink to this heading">ΒΆ</a></h1>
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="#"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="#">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul>
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="reticulum-network-stack-manual">
+<h1>Reticulum Network Stack Manual<a class="headerlink" href="#reticulum-network-stack-manual" title="Permalink to this heading">#</a></h1>
<p>This manual aims to provide you with all the information you need to
understand Reticulum, build networks or develop programs using it, or
to participate in the development of Reticulum itself.</p>
+<section id="table-of-contents">
+<h2>Table Of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this heading">#</a></h2>
+</section>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a><ul>
@@ -169,21 +353,6 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l2"><a class="reference internal" href="examples.html#filetransfer">Filetransfer</a></li>
</ul>
</li>
-<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="reference.html#classes">Classes</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Reticulum"><code class="docutils literal notranslate"><span class="pre">Reticulum</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Identity"><code class="docutils literal notranslate"><span class="pre">Identity</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Destination"><code class="docutils literal notranslate"><span class="pre">Destination</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Packet"><code class="docutils literal notranslate"><span class="pre">Packet</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.PacketReceipt"><code class="docutils literal notranslate"><span class="pre">PacketReceipt</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Link"><code class="docutils literal notranslate"><span class="pre">Link</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.RequestReceipt"><code class="docutils literal notranslate"><span class="pre">RequestReceipt</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Resource"><code class="docutils literal notranslate"><span class="pre">Resource</span></code></a></li>
-<li class="toctree-l3"><a class="reference internal" href="reference.html#RNS.Transport"><code class="docutils literal notranslate"><span class="pre">Transport</span></code></a></li>
-</ul>
-</li>
-</ul>
-</li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a><ul>
<li class="toctree-l2"><a class="reference internal" href="support.html#donations">Donations</a></li>
<li class="toctree-l2"><a class="reference internal" href="support.html#provide-feedback">Provide Feedback</a></li>
@@ -192,8 +361,24 @@ to participate in the development of Reticulum itself.</p>
</li>
</ul>
</div>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Reticulum"><code class="docutils literal notranslate"><span class="pre">Reticulum</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Identity"><code class="docutils literal notranslate"><span class="pre">Identity</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Destination"><code class="docutils literal notranslate"><span class="pre">Destination</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Packet"><code class="docutils literal notranslate"><span class="pre">Packet</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.PacketReceipt"><code class="docutils literal notranslate"><span class="pre">PacketReceipt</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Link"><code class="docutils literal notranslate"><span class="pre">Link</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.RequestReceipt"><code class="docutils literal notranslate"><span class="pre">RequestReceipt</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Resource"><code class="docutils literal notranslate"><span class="pre">Resource</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference.html#RNS.Transport"><code class="docutils literal notranslate"><span class="pre">Transport</span></code></a></li>
+</ul>
+</li>
+</ul>
+</div>
<section id="indices-and-tables">
-<h2>Indices and Tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Indices and Tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
@@ -201,65 +386,74 @@ to participate in the development of Reticulum itself.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="whatis.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">What is Reticulum?</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="#">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Reticulum Network Stack Manual</a><ul>
+<li><a class="reference internal" href="#table-of-contents">Table Of Contents</a></li>
<li><a class="reference internal" href="#indices-and-tables">Indices and Tables</a></li>
</ul>
</li>
</ul>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="whatis.html"
- title="next chapter">What is Reticulum?</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/index.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="whatis.html" title="What is Reticulum?"
- >next</a> |</li>
- <li class="nav-item nav-item-0"><a href="#">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Reticulum Network Stack Manual</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html
index 22b3851b..cb1b295e 100644
--- a/docs/manual/interfaces.html
+++ b/docs/manual/interfaces.html
@@ -1,51 +1,228 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Building Networks" href="networks.html" /><link rel="prev" title="Communications Hardware" href="hardware.html" />
+
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Supported Interfaces - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<!DOCTYPE html>
-
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Supported Interfaces — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Building Networks" href="networks.html" />
- <link rel="prev" title="Communications Hardware" href="hardware.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="networks.html" title="Building Networks"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="hardware.html" title="Communications Hardware"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Supported Interfaces</a></li>
- </ul>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="supported-interfaces">
-<span id="interfaces-main"></span><h1>Supported Interfaces<a class="headerlink" href="#supported-interfaces" title="Permalink to this heading">ΒΆ</a></h1>
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="supported-interfaces">
+<span id="interfaces-main"></span><h1>Supported Interfaces<a class="headerlink" href="#supported-interfaces" title="Permalink to this heading">#</a></h1>
<p>Reticulum supports using many kinds of devices as networking interfaces, and
allows you to mix and match them in any way you choose. The number of distinct
network topologies you can create with Reticulum is more or less endless, but
@@ -57,7 +234,7 @@ and gives example configurations for the respective interface types.</p>
types, have a look at the <a class="reference internal" href="networks.html#networks-main"><span class="std std-ref">Building Networks</span></a> chapter of this
manual.</p>
<section id="auto-interface">
-<span id="interfaces-auto"></span><h2>Auto Interface<a class="headerlink" href="#auto-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-auto"></span><h2>Auto Interface<a class="headerlink" href="#auto-interface" title="Permalink to this heading">#</a></h2>
<p>The Auto Interface enables communication with other discoverable Reticulum
nodes over autoconfigured IPv6 and UDP. It does not need any functional IP
infrastructure like routers or DHCP servers, but will require at least some
@@ -111,7 +288,7 @@ the discovery scope by setting it to one of <code class="docutils literal notran
</div>
</section>
<section id="i2p-interface">
-<span id="interfaces-i2p"></span><h2>I2P Interface<a class="headerlink" href="#i2p-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-i2p"></span><h2>I2P Interface<a class="headerlink" href="#i2p-interface" title="Permalink to this heading">#</a></h2>
<p>The I2P interface lets you connect Reticulum instances over the
<a class="reference external" href="https://i2pd.website">Invisible Internet Protocol</a>. This can be
especially useful in cases where you want to host a globally reachable
@@ -164,7 +341,7 @@ of flexibility in network setup, while retaining ease of use in simpler
use-cases.</p>
</section>
<section id="tcp-server-interface">
-<span id="interfaces-tcps"></span><h2>TCP Server Interface<a class="headerlink" href="#tcp-server-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-tcps"></span><h2>TCP Server Interface<a class="headerlink" href="#tcp-server-interface" title="Permalink to this heading">#</a></h2>
<p>The TCP Server interface is suitable for allowing other peers to connect over
the Internet or private IP networks. When a TCP server interface has been
configured, other Reticulum peers can connect to it with a TCP Client interface.</p>
@@ -207,7 +384,7 @@ you must use the i2p_tunneled option:</p>
control, and using I2P routers running on external systems, this option also exists.</p>
</section>
<section id="tcp-client-interface">
-<span id="interfaces-tcpc"></span><h2>TCP Client Interface<a class="headerlink" href="#tcp-client-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-tcpc"></span><h2>TCP Client Interface<a class="headerlink" href="#tcp-client-interface" title="Permalink to this heading">#</a></h2>
<p>To connect to a TCP server interface, you would naturally use the TCP client
interface. Many TCP Client interfaces from different peers can connect to the
same TCP Server interface at the same time.</p>
@@ -256,7 +433,7 @@ you must use the i2p_tunneled option:</p>
</div>
</section>
<section id="udp-interface">
-<span id="interfaces-udp"></span><h2>UDP Interface<a class="headerlink" href="#udp-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-udp"></span><h2>UDP Interface<a class="headerlink" href="#udp-interface" title="Permalink to this heading">#</a></h2>
<p>A UDP interface can be useful for communicating over IP networks, both
private and the internet. It can also allow broadcast communication
over IP networks, so it can provide an easy way to enable connectivity
@@ -311,7 +488,7 @@ easier to use.</p>
</div>
</section>
<section id="rnode-lora-interface">
-<span id="interfaces-rnode"></span><h2>RNode LoRa Interface<a class="headerlink" href="#rnode-lora-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-rnode"></span><h2>RNode LoRa Interface<a class="headerlink" href="#rnode-lora-interface" title="Permalink to this heading">#</a></h2>
<p>To use Reticulum over LoRa, the <a class="reference external" href="https://unsigned.io/rnode/">RNode</a> interface
can be used, and offers full control over LoRa parameters.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Here's an example of how to add a LoRa interface</span>
@@ -362,7 +539,7 @@ can be used, and offers full control over LoRa parameters.</p>
</div>
</section>
<section id="serial-interface">
-<span id="interfaces-serial"></span><h2>Serial Interface<a class="headerlink" href="#serial-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-serial"></span><h2>Serial Interface<a class="headerlink" href="#serial-interface" title="Permalink to this heading">#</a></h2>
<p>Reticulum can be used over serial ports directly, or over any device with a
serial port, that will transparently pass data. Useful for communicating
directly over a wire-pair, or for using devices such as data radios and lasers.</p>
@@ -383,7 +560,7 @@ directly over a wire-pair, or for using devices such as data radios and lasers.<
</div>
</section>
<section id="pipe-interface">
-<span id="interfaces-pipe"></span><h2>Pipe Interface<a class="headerlink" href="#pipe-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-pipe"></span><h2>Pipe Interface<a class="headerlink" href="#pipe-interface" title="Permalink to this heading">#</a></h2>
<p>Using this interface, Reticulum can use any program as an interface via <cite>stdin</cite> and
<cite>stdout</cite>. This can be used to easily create virtual interfaces, or to interface with
custom hardware or other systems.</p>
@@ -403,7 +580,7 @@ continuously read and scan its <cite>stdout</cite> for Reticulum packets. If <co
Reticulum will try to respawn the program after waiting for <code class="docutils literal notranslate"><span class="pre">respawn_interval</span></code> seconds.</p>
</section>
<section id="kiss-interface">
-<span id="interfaces-kiss"></span><h2>KISS Interface<a class="headerlink" href="#kiss-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-kiss"></span><h2>KISS Interface<a class="headerlink" href="#kiss-interface" title="Permalink to this heading">#</a></h2>
<p>With the KISS interface, you can use Reticulum over a variety of packet
radio modems and TNCs, including <a class="reference external" href="https://unsigned.io/openmodem/">OpenModem</a>.
KISS interfaces can also be configured to periodically send out beacons
@@ -455,7 +632,7 @@ for station identification purposes.</p>
</div>
</section>
<section id="ax-25-kiss-interface">
-<span id="interfaces-ax25"></span><h2>AX.25 KISS Interface<a class="headerlink" href="#ax-25-kiss-interface" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-ax25"></span><h2>AX.25 KISS Interface<a class="headerlink" href="#ax-25-kiss-interface" title="Permalink to this heading">#</a></h2>
<p>If youβre using Reticulum on amateur radio spectrum, you might want to
use the AX.25 KISS interface. This way, Reticulum will automatically
encapsulate itβs traffic in AX.25 and also identify your stations
@@ -511,7 +688,7 @@ beaconing functionality described above.</p>
</div>
</section>
<section id="common-interface-options">
-<span id="interfaces-options"></span><h2>Common Interface Options<a class="headerlink" href="#common-interface-options" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-options"></span><h2>Common Interface Options<a class="headerlink" href="#common-interface-options" title="Permalink to this heading">#</a></h2>
<p>A number of general configuration options are available on most interfaces.
These can be used to control various aspects of interface behaviour.</p>
<blockquote>
@@ -607,7 +784,7 @@ option, to set the interface speed in <em>bits per second</em>.</div>
</div></blockquote>
</section>
<section id="interface-modes">
-<span id="interfaces-modes"></span><h2>Interface Modes<a class="headerlink" href="#interface-modes" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-modes"></span><h2>Interface Modes<a class="headerlink" href="#interface-modes" title="Permalink to this heading">#</a></h2>
<p>The optional <code class="docutils literal notranslate"><span class="pre">mode</span></code> setting is available on all interfaces, and allows
selecting the high-level behaviour of the interface from a number of modes.
These modes affect how Reticulum selects paths in the network, how announces
@@ -699,7 +876,7 @@ connecting over the Internet should be set to <code class="docutils literal notr
please see the <a class="reference internal" href="understanding.html#understanding-announcepropagation"><span class="std std-ref">Announce Propagation Rules</span></a> section.</p>
</section>
<section id="announce-rate-control">
-<span id="interfaces-announcerates"></span><h2>Announce Rate Control<a class="headerlink" href="#announce-rate-control" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="interfaces-announcerates"></span><h2>Announce Rate Control<a class="headerlink" href="#announce-rate-control" title="Permalink to this heading">#</a></h2>
<p>The built-in announce control mechanisms and the default <code class="docutils literal notranslate"><span class="pre">announce_cap</span></code>
option described above are sufficient most of the time, but in some cases, especially on fast
interfaces, it may be useful to control the target announce rate. Using the
@@ -748,16 +925,62 @@ that a large span of network types can seamlessly <em>co-exist</em> and intercon
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="networks.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Building Networks</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="hardware.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Communications Hardware</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Supported Interfaces</a><ul>
<li><a class="reference internal" href="#auto-interface">Auto Interface</a></li>
<li><a class="reference internal" href="#i2p-interface">I2P Interface</a></li>
@@ -776,57 +999,21 @@ that a large span of network types can seamlessly <em>co-exist</em> and intercon
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="hardware.html"
- title="previous chapter">Communications Hardware</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="networks.html"
- title="next chapter">Building Networks</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/interfaces.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="networks.html" title="Building Networks"
- >next</a> |</li>
- <li class="right" >
- <a href="hardware.html" title="Communications Hardware"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Supported Interfaces</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/networks.html b/docs/manual/networks.html
index 45c41edb..a9f45c07 100644
--- a/docs/manual/networks.html
+++ b/docs/manual/networks.html
@@ -1,51 +1,228 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Code Examples" href="examples.html" /><link rel="prev" title="Supported Interfaces" href="interfaces.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Building Networks - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Building Networks — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Code Examples" href="examples.html" />
- <link rel="prev" title="Supported Interfaces" href="interfaces.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="examples.html" title="Code Examples"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="interfaces.html" title="Supported Interfaces"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Building Networks</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="building-networks">
-<span id="networks-main"></span><h1>Building Networks<a class="headerlink" href="#building-networks" title="Permalink to this heading">ΒΆ</a></h1>
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="building-networks">
+<span id="networks-main"></span><h1>Building Networks<a class="headerlink" href="#building-networks" title="Permalink to this heading">#</a></h1>
<p>This chapter will provide you with the knowledge needed to build networks with
Reticulum, which can often be easier than using traditional stacks, since you
donβt have to worry about coordinating addresses, subnets and routing for an
@@ -54,7 +231,7 @@ Reticulum, you can simply add more segments to your network when it becomes
necessary, and Reticulum will handle the convergence of the entire network
automatically.</p>
<section id="concepts-overview">
-<h2>Concepts & Overview<a class="headerlink" href="#concepts-overview" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Concepts & Overview<a class="headerlink" href="#concepts-overview" title="Permalink to this heading">#</a></h2>
<p>There are important points that need to be kept in mind when building networks
with Reticulum:</p>
<blockquote>
@@ -149,11 +326,11 @@ decide which are suitable to use in any given situation, depending on where
traffic needs to flow.</p>
</section>
<section id="example-scenarios">
-<h2>Example Scenarios<a class="headerlink" href="#example-scenarios" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Example Scenarios<a class="headerlink" href="#example-scenarios" title="Permalink to this heading">#</a></h2>
<p>This section illustrates a few example scenarios, and how they would, in general
terms, be planned, implemented and configured.</p>
<section id="interconnected-lora-sites">
-<h3>Interconnected LoRa Sites<a class="headerlink" href="#interconnected-lora-sites" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Interconnected LoRa Sites<a class="headerlink" href="#interconnected-lora-sites" title="Permalink to this heading">#</a></h3>
<p>An organisation wants to provide communication and information services to itβs
members, which are located mainly in three separate areas. Three suitable hill-top
locations are found, where the organisation can install equipment: Site A, B and C.</p>
@@ -182,7 +359,7 @@ communicating with the LoRa radios installed at the gateway sites.</p>
else across all three sites.</p>
</section>
<section id="bridging-over-the-internet">
-<h3>Bridging Over the Internet<a class="headerlink" href="#bridging-over-the-internet" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Bridging Over the Internet<a class="headerlink" href="#bridging-over-the-internet" title="Permalink to this heading">#</a></h3>
<p>As the organisation grows, several new communities form in places too far away
from the core network to be reachable over WiFi links. New gateways similar to those
previously installed are set up for the new communities at the new sites D and E, but
@@ -199,7 +376,7 @@ combined users of sites A, B and C. She then enables transport on her node, and
traffic from site D can now reach everyone at site A, B and C, and vice versa.</p>
</section>
<section id="growth-and-convergence">
-<h3>Growth and Convergence<a class="headerlink" href="#growth-and-convergence" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Growth and Convergence<a class="headerlink" href="#growth-and-convergence" title="Permalink to this heading">#</a></h3>
<p>As the organisation grows, more gateways are added to keep up with the growing user
base. Some local gateways even add VHF radios and packet modems to reach outlying users
and communities that are out of reach for the LoRa radios and WiFi backhauls.</p>
@@ -215,16 +392,62 @@ connected outliers are now an integral part of the network.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="examples.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Code Examples</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="interfaces.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Supported Interfaces</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Building Networks</a><ul>
<li><a class="reference internal" href="#concepts-overview">Concepts & Overview</a></li>
<li><a class="reference internal" href="#example-scenarios">Example Scenarios</a><ul>
@@ -237,57 +460,21 @@ connected outliers are now an integral part of the network.</p>
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="interfaces.html"
- title="previous chapter">Supported Interfaces</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="examples.html"
- title="next chapter">Code Examples</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/networks.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="examples.html" title="Code Examples"
- >next</a> |</li>
- <li class="right" >
- <a href="interfaces.html" title="Supported Interfaces"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Building Networks</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/reference.html b/docs/manual/reference.html
index c560c271..569f2daf 100644
--- a/docs/manual/reference.html
+++ b/docs/manual/reference.html
@@ -1,59 +1,234 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="Support Reticulum" href="support.html" />
+
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>API Reference - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<!DOCTYPE html>
-
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>API Reference — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Support Reticulum" href="support.html" />
- <link rel="prev" title="Code Examples" href="examples.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="support.html" title="Support Reticulum"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Code Examples"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">API Reference</a></li>
- </ul>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="api-reference">
-<span id="api-main"></span><h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this heading">ΒΆ</a></h1>
-<p>This chapter lists and explains all classes exposed by the Reticulum Network Stack API, along with their methods and usage. It can be used as a reference while writing applications that utilise Reticulum, or read in entirity to gain an understanding of the complete functionality of RNS from a developers perspective.</p>
-<section id="classes">
-<h2>Classes<a class="headerlink" href="#classes" title="Permalink to this heading">ΒΆ</a></h2>
-<p>Communication over a Reticulum network is achieved using a set of classes exposed by the RNS API.</p>
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul>
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul class="current">
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="api-reference">
+<span id="api-main"></span><h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this heading">#</a></h1>
+<p>Communication over Reticulum networks is achieved by using a simple set of classes exposed by the RNS API.
+This chapter lists and explains all classes exposed by the Reticulum Network Stack API, along with their method signatures and usage. It can be used as a reference while writing applications that utilise Reticulum, or it can be read in entirity to gain an understanding of the complete functionality of RNS from a developers perspective.</p>
<p id="api-reticulum"><h3> Reticulum </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Reticulum">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Reticulum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">configdir</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loglevel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">logdest</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Reticulum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">configdir</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loglevel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">logdest</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum" title="Permalink to this definition">#</a></dt>
<dd><p>This class is used to initialise access to Reticulum within a
program. You must create exactly one instance of this class before
carrying out any other RNS operations, such as creating destinations
@@ -76,7 +251,7 @@ it will be advantageous to run a master RNS instance as a daemon for
other programs to use on demand.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Reticulum.MTU">
-<span class="sig-name descname"><span class="pre">MTU</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">500</span></em><a class="headerlink" href="#RNS.Reticulum.MTU" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">MTU</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">500</span></em><a class="headerlink" href="#RNS.Reticulum.MTU" title="Permalink to this definition">#</a></dt>
<dd><p>The MTU that Reticulum adheres to, and will expect other peers to
adhere to. By default, the MTU is 507 bytes. In custom RNS network
implementations, it is possible to change this value, but doing so will
@@ -88,7 +263,7 @@ the default value.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Reticulum.ANNOUNCE_CAP">
-<span class="sig-name descname"><span class="pre">ANNOUNCE_CAP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#RNS.Reticulum.ANNOUNCE_CAP" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">ANNOUNCE_CAP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#RNS.Reticulum.ANNOUNCE_CAP" title="Permalink to this definition">#</a></dt>
<dd><p>The maximum percentage of interface bandwidth that, at any given time,
may be used to propagate announces. If an announce was scheduled for
broadcasting on an interface, but doing so would exceed the allowed
@@ -105,10 +280,10 @@ but it can be configured individually on a per-interface basis.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Reticulum.should_use_implicit_proof">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">should_use_implicit_proof</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.should_use_implicit_proof" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">should_use_implicit_proof</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.should_use_implicit_proof" title="Permalink to this definition">#</a></dt>
<dd><p>Returns whether proofs sent are explicit or implicit.</p>
<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>True if the current running configuration specifies to use implicit proofs. False if not.</p>
</dd>
</dl>
@@ -116,14 +291,14 @@ but it can be configured individually on a per-interface basis.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Reticulum.transport_enabled">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">transport_enabled</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.transport_enabled" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">transport_enabled</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.transport_enabled" title="Permalink to this definition">#</a></dt>
<dd><p>Returns whether Transport is enabled for the running
instance.</p>
<p>When Transport is enabled, Reticulum will
route traffic for other peers, respond to path requests
and pass announces over the network.</p>
<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>True if Transport is enabled, False if not.</p>
</dd>
</dl>
@@ -134,43 +309,43 @@ and pass announces over the network.</p>
<p id="api-identity"><h3> Identity </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Identity">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Identity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">create_keys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Identity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">create_keys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity" title="Permalink to this definition">#</a></dt>
<dd><p>This class is used to manage identities in Reticulum. It provides methods
for encryption, decryption, signatures and verification, and is the basis
for all encrypted communication over Reticulum networks.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>create_keys</strong> β Specifies whether new encryption and signing keys should be generated.</p>
</dd>
</dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Identity.CURVE">
-<span class="sig-name descname"><span class="pre">CURVE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'Curve25519'</span></em><a class="headerlink" href="#RNS.Identity.CURVE" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">CURVE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'Curve25519'</span></em><a class="headerlink" href="#RNS.Identity.CURVE" title="Permalink to this definition">#</a></dt>
<dd><p>The curve used for Elliptic Curve DH key exchanges</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Identity.KEYSIZE">
-<span class="sig-name descname"><span class="pre">KEYSIZE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">512</span></em><a class="headerlink" href="#RNS.Identity.KEYSIZE" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">KEYSIZE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">512</span></em><a class="headerlink" href="#RNS.Identity.KEYSIZE" title="Permalink to this definition">#</a></dt>
<dd><p>X25519 key size in bits. A complete key is the concatenation of a 256 bit encryption key, and a 256 bit signing key.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Identity.TRUNCATED_HASHLENGTH">
-<span class="sig-name descname"><span class="pre">TRUNCATED_HASHLENGTH</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">128</span></em><a class="headerlink" href="#RNS.Identity.TRUNCATED_HASHLENGTH" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">TRUNCATED_HASHLENGTH</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">128</span></em><a class="headerlink" href="#RNS.Identity.TRUNCATED_HASHLENGTH" title="Permalink to this definition">#</a></dt>
<dd><p>Constant specifying the truncated hash length (in bits) used by Reticulum
for addressable hashes and other purposes. Non-configurable.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.recall">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">recall</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.recall" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">recall</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.recall" title="Permalink to this definition">#</a></dt>
<dd><p>Recall identity for a destination hash.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>destination_hash</strong> β Destination hash as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>An <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> instance that can be used to create an outgoing <a class="reference internal" href="#api-destination"><span class="std std-ref">RNS.Destination</span></a>, or <em>None</em> if the destination is unknown.</p>
</dd>
</dl>
@@ -178,13 +353,13 @@ for addressable hashes and other purposes. Non-configurable.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.recall_app_data">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">recall_app_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.recall_app_data" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">recall_app_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.recall_app_data" title="Permalink to this definition">#</a></dt>
<dd><p>Recall last heard app_data for a destination hash.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>destination_hash</strong> β Destination hash as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Bytes</em> containing app_data, or <em>None</em> if the destination is unknown.</p>
</dd>
</dl>
@@ -192,13 +367,13 @@ for addressable hashes and other purposes. Non-configurable.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.full_hash">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">full_hash</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.full_hash" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">full_hash</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.full_hash" title="Permalink to this definition">#</a></dt>
<dd><p>Get a SHA-256 hash of passed data.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> β Data to be hashed as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>SHA-256 hash as <em>bytes</em></p>
</dd>
</dl>
@@ -206,13 +381,13 @@ for addressable hashes and other purposes. Non-configurable.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.truncated_hash">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">truncated_hash</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.truncated_hash" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">truncated_hash</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.truncated_hash" title="Permalink to this definition">#</a></dt>
<dd><p>Get a truncated SHA-256 hash of passed data.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> β Data to be hashed as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Truncated SHA-256 hash as <em>bytes</em></p>
</dd>
</dl>
@@ -220,13 +395,13 @@ for addressable hashes and other purposes. Non-configurable.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.get_random_hash">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_random_hash</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.get_random_hash" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_random_hash</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.get_random_hash" title="Permalink to this definition">#</a></dt>
<dd><p>Get a random SHA-256 hash.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> β Data to be hashed as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Truncated SHA-256 hash of random data as <em>bytes</em></p>
</dd>
</dl>
@@ -234,14 +409,14 @@ for addressable hashes and other purposes. Non-configurable.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.from_bytes">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prv_bytes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.from_bytes" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prv_bytes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.from_bytes" title="Permalink to this definition">#</a></dt>
<dd><p>Create a new <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> instance from <em>bytes</em> of private key.
Can be used to load previously created and saved identities into Reticulum.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>prv_bytes</strong> β The <em>bytes</em> of private a saved private key. <strong>HAZARD!</strong> Never use this to generate a new key by feeding random data in prv_bytes.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> instance, or <em>None</em> if the <em>bytes</em> data was invalid.</p>
</dd>
</dl>
@@ -249,14 +424,14 @@ Can be used to load previously created and saved identities into Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.from_file">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.from_file" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.from_file" title="Permalink to this definition">#</a></dt>
<dd><p>Create a new <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> instance from a file.
Can be used to load previously created and saved identities into Reticulum.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>path</strong> β The full path to the saved <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> data</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> instance, or <em>None</em> if the loaded data was invalid.</p>
</dd>
</dl>
@@ -264,15 +439,15 @@ Can be used to load previously created and saved identities into Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.to_file">
-<span class="sig-name descname"><span class="pre">to_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.to_file" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">to_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.to_file" title="Permalink to this definition">#</a></dt>
<dd><p>Saves the identity to a file. This will write the private key to disk,
and anyone with access to this file will be able to decrypt all
communication for the identity. Be very careful with this method.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>path</strong> β The full path specifying where to save the identity.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if the file was saved, otherwise False.</p>
</dd>
</dl>
@@ -280,9 +455,9 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.get_private_key">
-<span class="sig-name descname"><span class="pre">get_private_key</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.get_private_key" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_private_key</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.get_private_key" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The private key as <em>bytes</em></p>
</dd>
</dl>
@@ -290,9 +465,9 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.get_public_key">
-<span class="sig-name descname"><span class="pre">get_public_key</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.get_public_key" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_public_key</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.get_public_key" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The public key as <em>bytes</em></p>
</dd>
</dl>
@@ -300,13 +475,13 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.load_private_key">
-<span class="sig-name descname"><span class="pre">load_private_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prv_bytes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.load_private_key" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">load_private_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prv_bytes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.load_private_key" title="Permalink to this definition">#</a></dt>
<dd><p>Load a private key into the instance.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>prv_bytes</strong> β The private key as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if the key was loaded, otherwise False.</p>
</dd>
</dl>
@@ -314,13 +489,13 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.load_public_key">
-<span class="sig-name descname"><span class="pre">load_public_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pub_bytes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.load_public_key" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">load_public_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pub_bytes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.load_public_key" title="Permalink to this definition">#</a></dt>
<dd><p>Load a public key into the instance.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pub_bytes</strong> β The public key as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if the key was loaded, otherwise False.</p>
</dd>
</dl>
@@ -328,16 +503,16 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.encrypt">
-<span class="sig-name descname"><span class="pre">encrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plaintext</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.encrypt" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">encrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plaintext</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.encrypt" title="Permalink to this definition">#</a></dt>
<dd><p>Encrypts information for the identity.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>plaintext</strong> β The plaintext to be encrypted as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Ciphertext token as <em>bytes</em>.</p>
</dd>
-<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><em>KeyError</em> if the instance does not hold a public key.</p>
</dd>
</dl>
@@ -345,16 +520,16 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.decrypt">
-<span class="sig-name descname"><span class="pre">decrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ciphertext_token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.decrypt" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">decrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ciphertext_token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.decrypt" title="Permalink to this definition">#</a></dt>
<dd><p>Decrypts information for the identity.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>ciphertext</strong> β The ciphertext to be decrypted as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Plaintext as <em>bytes</em>, or <em>None</em> if decryption fails.</p>
</dd>
-<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><em>KeyError</em> if the instance does not hold a private key.</p>
</dd>
</dl>
@@ -362,16 +537,16 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.sign">
-<span class="sig-name descname"><span class="pre">sign</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.sign" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">sign</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.sign" title="Permalink to this definition">#</a></dt>
<dd><p>Signs information by the identity.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>message</strong> β The message to be signed as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Signature as <em>bytes</em>.</p>
</dd>
-<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><em>KeyError</em> if the instance does not hold a private key.</p>
</dd>
</dl>
@@ -379,19 +554,19 @@ communication for the identity. Be very careful with this method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Identity.validate">
-<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">signature</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.validate" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">signature</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Identity.validate" title="Permalink to this definition">#</a></dt>
<dd><p>Validates the signature of a signed message.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>signature</strong> β The signature to be validated as <em>bytes</em>.</p></li>
<li><p><strong>message</strong> β The message to be validated as <em>bytes</em>.</p></li>
</ul>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if the signature is valid, otherwise False.</p>
</dd>
-<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><em>KeyError</em> if the instance does not hold a public key.</p>
</dd>
</dl>
@@ -402,7 +577,7 @@ communication for the identity. Be very careful with this method.</p>
<p id="api-destination"><h3> Destination </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Destination">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Destination</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">identity</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">direction</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">app_name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">aspects</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Destination</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">identity</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">direction</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">app_name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">aspects</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination" title="Permalink to this definition">#</a></dt>
<dd><p>A class used to describe endpoints in a Reticulum Network. Destination
instances are used both to create outgoing and incoming endpoints. The
destination type will decide if encryption, and what type, is used in
@@ -410,7 +585,7 @@ communication with the endpoint. A destination can also announce its
presence on the network, which will also distribute necessary keys for
encrypted communication with it.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>identity</strong> β An instance of <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a>. Can hold only public keys for an outgoing destination, or holding private keys for an ingoing.</p></li>
<li><p><strong>direction</strong> β <code class="docutils literal notranslate"><span class="pre">RNS.Destination.IN</span></code> or <code class="docutils literal notranslate"><span class="pre">RNS.Destination.OUT</span></code>.</p></li>
@@ -422,9 +597,9 @@ encrypted communication with it.</p>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.full_name">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">full_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">aspects</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.full_name" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">full_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">aspects</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.full_name" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A string containing the full human-readable name of the destination, for an app_name and a number of aspects.</p>
</dd>
</dl>
@@ -432,9 +607,9 @@ encrypted communication with it.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.app_and_aspects_from_name">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">app_and_aspects_from_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">full_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.app_and_aspects_from_name" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">app_and_aspects_from_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">full_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.app_and_aspects_from_name" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A tuple containing the app name and a list of aspects, for a full-name string.</p>
</dd>
</dl>
@@ -442,9 +617,9 @@ encrypted communication with it.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.hash_from_name_and_identity">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">hash_from_name_and_identity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">full_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">identity</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.hash_from_name_and_identity" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">hash_from_name_and_identity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">full_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">identity</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.hash_from_name_and_identity" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A destination name in adressable hash form, for a full name string and Identity instance.</p>
</dd>
</dl>
@@ -452,9 +627,9 @@ encrypted communication with it.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.hash">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">hash</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">aspects</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.hash" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">hash</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">aspects</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.hash" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A destination name in adressable hash form, for an app_name and a number of aspects.</p>
</dd>
</dl>
@@ -462,11 +637,11 @@ encrypted communication with it.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.announce">
-<span class="sig-name descname"><span class="pre">announce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path_response</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.announce" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">announce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path_response</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.announce" title="Permalink to this definition">#</a></dt>
<dd><p>Creates an announce packet for this destination and broadcasts it on all
relevant interfaces. Application specific data can be added to the announce.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>app_data</strong> β <em>bytes</em> containing the app_data.</p></li>
<li><p><strong>path_response</strong> β Internal flag used by <a class="reference internal" href="#api-transport"><span class="std std-ref">RNS.Transport</span></a>. Ignore.</p></li>
@@ -477,13 +652,13 @@ relevant interfaces. Application specific data can be added to the announce.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.accepts_links">
-<span class="sig-name descname"><span class="pre">accepts_links</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accepts</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.accepts_links" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">accepts_links</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">accepts</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.accepts_links" title="Permalink to this definition">#</a></dt>
<dd><p>Set or query whether the destination accepts incoming link requests.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>accepts</strong> β If <code class="docutils literal notranslate"><span class="pre">True</span></code> or <code class="docutils literal notranslate"><span class="pre">False</span></code>, this method sets whether the destination accepts incoming link requests. If not provided or <code class="docutils literal notranslate"><span class="pre">None</span></code>, the method returns whether the destination currently accepts link requests.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">True</span></code> or <code class="docutils literal notranslate"><span class="pre">False</span></code> depending on whether the destination accepts incoming link requests, if the <em>accepts</em> parameter is not provided or <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
</dd>
</dl>
@@ -491,11 +666,11 @@ relevant interfaces. Application specific data can be added to the announce.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.set_link_established_callback">
-<span class="sig-name descname"><span class="pre">set_link_established_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_link_established_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_link_established_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_link_established_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a link has been established to
this destination.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(link)</em> to be called when a new link is established with this destination.</p>
</dd>
</dl>
@@ -503,11 +678,11 @@ this destination.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.set_packet_callback">
-<span class="sig-name descname"><span class="pre">set_packet_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_packet_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_packet_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_packet_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a packet has been received by
this destination.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(data, packet)</em> to be called when this destination receives a packet.</p>
</dd>
</dl>
@@ -515,12 +690,12 @@ this destination.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.set_proof_requested_callback">
-<span class="sig-name descname"><span class="pre">set_proof_requested_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_proof_requested_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_proof_requested_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_proof_requested_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a proof has been requested for
a packet sent to this destination. Allows control over when and if
proofs should be returned for received packets.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method to with the signature <em>callback(packet)</em> be called when a packet that requests a proof is received. The callback must return one of True or False. If the callback returns True, a proof will be sent. If it returns False, a proof will not be sent.</p>
</dd>
</dl>
@@ -528,10 +703,10 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.set_proof_strategy">
-<span class="sig-name descname"><span class="pre">set_proof_strategy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">proof_strategy</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_proof_strategy" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_proof_strategy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">proof_strategy</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_proof_strategy" title="Permalink to this definition">#</a></dt>
<dd><p>Sets the destinations proof strategy.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>proof_strategy</strong> β One of <code class="docutils literal notranslate"><span class="pre">RNS.Destination.PROVE_NONE</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.Destination.PROVE_ALL</span></code> or <code class="docutils literal notranslate"><span class="pre">RNS.Destination.PROVE_APP</span></code>. If <code class="docutils literal notranslate"><span class="pre">RNS.Destination.PROVE_APP</span></code> is set, the <cite>proof_requested_callback</cite> will be called to determine whether a proof should be sent or not.</p>
</dd>
</dl>
@@ -539,10 +714,10 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.register_request_handler">
-<span class="sig-name descname"><span class="pre">register_request_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">response_generator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">ALLOW_NONE</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allowed_list</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.register_request_handler" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">register_request_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">response_generator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">ALLOW_NONE</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allowed_list</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.register_request_handler" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a request handler.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>path</strong> β The path for the request handler to be registered.</p></li>
<li><p><strong>response_generator</strong> β A function or method with the signature <em>response_generator(path, data, request_id, remote_identity, requested_at)</em> to be called. Whatever this funcion returns will be sent as a response to the requester. If the function returns <code class="docutils literal notranslate"><span class="pre">None</span></code>, no response will be sent.</p></li>
@@ -550,7 +725,7 @@ proofs should be returned for received packets.</p>
<li><p><strong>allowed_list</strong> β A list of <em>bytes-like</em> <a class="reference internal" href="#api-identity"><span class="std std-ref">RNS.Identity</span></a> hashes.</p></li>
</ul>
</dd>
-<dt class="field-even">Raises<span class="colon">:</span></dt>
+<dt class="field-even">Raises</dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">ValueError</span></code> if any of the supplied arguments are invalid.</p>
</dd>
</dl>
@@ -558,13 +733,13 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.deregister_request_handler">
-<span class="sig-name descname"><span class="pre">deregister_request_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.deregister_request_handler" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">deregister_request_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.deregister_request_handler" title="Permalink to this definition">#</a></dt>
<dd><p>Deregisters a request handler.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>path</strong> β The path for the request handler to be deregistered.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if the handler was deregistered, otherwise False.</p>
</dd>
</dl>
@@ -572,10 +747,10 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.create_keys">
-<span class="sig-name descname"><span class="pre">create_keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.create_keys" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">create_keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.create_keys" title="Permalink to this definition">#</a></dt>
<dd><p>For a <code class="docutils literal notranslate"><span class="pre">RNS.Destination.GROUP</span></code> type destination, creates a new symmetric key.</p>
<dl class="field-list simple">
-<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">TypeError</span></code> if called on an incompatible type of destination.</p>
</dd>
</dl>
@@ -583,10 +758,10 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.get_private_key">
-<span class="sig-name descname"><span class="pre">get_private_key</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.get_private_key" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_private_key</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.get_private_key" title="Permalink to this definition">#</a></dt>
<dd><p>For a <code class="docutils literal notranslate"><span class="pre">RNS.Destination.GROUP</span></code> type destination, returns the symmetric private key.</p>
<dl class="field-list simple">
-<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">TypeError</span></code> if called on an incompatible type of destination.</p>
</dd>
</dl>
@@ -594,13 +769,13 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.load_private_key">
-<span class="sig-name descname"><span class="pre">load_private_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.load_private_key" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">load_private_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.load_private_key" title="Permalink to this definition">#</a></dt>
<dd><p>For a <code class="docutils literal notranslate"><span class="pre">RNS.Destination.GROUP</span></code> type destination, loads a symmetric private key.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> β A <em>bytes-like</em> containing the symmetric key.</p>
</dd>
-<dt class="field-even">Raises<span class="colon">:</span></dt>
+<dt class="field-even">Raises</dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">TypeError</span></code> if called on an incompatible type of destination.</p>
</dd>
</dl>
@@ -608,13 +783,13 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.encrypt">
-<span class="sig-name descname"><span class="pre">encrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plaintext</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.encrypt" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">encrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plaintext</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.encrypt" title="Permalink to this definition">#</a></dt>
<dd><p>Encrypts information for <code class="docutils literal notranslate"><span class="pre">RNS.Destination.SINGLE</span></code> or <code class="docutils literal notranslate"><span class="pre">RNS.Destination.GROUP</span></code> type destination.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>plaintext</strong> β A <em>bytes-like</em> containing the plaintext to be encrypted.</p>
</dd>
-<dt class="field-even">Raises<span class="colon">:</span></dt>
+<dt class="field-even">Raises</dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">ValueError</span></code> if destination does not hold a necessary key for encryption.</p>
</dd>
</dl>
@@ -622,13 +797,13 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.decrypt">
-<span class="sig-name descname"><span class="pre">decrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ciphertext</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.decrypt" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">decrypt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ciphertext</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.decrypt" title="Permalink to this definition">#</a></dt>
<dd><p>Decrypts information for <code class="docutils literal notranslate"><span class="pre">RNS.Destination.SINGLE</span></code> or <code class="docutils literal notranslate"><span class="pre">RNS.Destination.GROUP</span></code> type destination.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>ciphertext</strong> β <em>Bytes</em> containing the ciphertext to be decrypted.</p>
</dd>
-<dt class="field-even">Raises<span class="colon">:</span></dt>
+<dt class="field-even">Raises</dt>
<dd class="field-even"><p><code class="docutils literal notranslate"><span class="pre">ValueError</span></code> if destination does not hold a necessary key for decryption.</p>
</dd>
</dl>
@@ -636,13 +811,13 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.sign">
-<span class="sig-name descname"><span class="pre">sign</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.sign" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">sign</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.sign" title="Permalink to this definition">#</a></dt>
<dd><p>Signs information for <code class="docutils literal notranslate"><span class="pre">RNS.Destination.SINGLE</span></code> type destination.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>message</strong> β <em>Bytes</em> containing the message to be signed.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A <em>bytes-like</em> containing the message signature, or <em>None</em> if the destination could not sign the message.</p>
</dd>
</dl>
@@ -650,12 +825,12 @@ proofs should be returned for received packets.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.set_default_app_data">
-<span class="sig-name descname"><span class="pre">set_default_app_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_default_app_data" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_default_app_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app_data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.set_default_app_data" title="Permalink to this definition">#</a></dt>
<dd><p>Sets the default app_data for the destination. If set, the default
app_data will be included in every announce sent by the destination,
unless other app_data is specified in the <em>announce</em> method.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>app_data</strong> β A <em>bytes-like</em> containing the default app_data, or a <em>callable</em> returning a <em>bytes-like</em> containing the app_data.</p>
</dd>
</dl>
@@ -663,7 +838,7 @@ unless other app_data is specified in the <em>announce</em> method.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Destination.clear_default_app_data">
-<span class="sig-name descname"><span class="pre">clear_default_app_data</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.clear_default_app_data" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">clear_default_app_data</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Destination.clear_default_app_data" title="Permalink to this definition">#</a></dt>
<dd><p>Clears default app_data previously set for the destination.</p>
</dd></dl>
@@ -672,7 +847,7 @@ unless other app_data is specified in the <em>announce</em> method.</p>
<p id="api-packet"><h3> Packet </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Packet">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Packet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">create_receipt</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Packet" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Packet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">create_receipt</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Packet" title="Permalink to this definition">#</a></dt>
<dd><p>The Packet class is used to create packet instances that can be sent
over a Reticulum network. Packets will automatically be encrypted if
they are adressed to a <code class="docutils literal notranslate"><span class="pre">RNS.Destination.SINGLE</span></code> destination,
@@ -685,7 +860,7 @@ derived ephemeral AES-128 key for every packet.</p>
<p>For <a class="reference internal" href="#api-link"><span class="std std-ref">RNS.Link</span></a> destinations, Reticulum will use per-link
ephemeral keys, and offers <strong>Forward Secrecy</strong>.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>destination</strong> β A <a class="reference internal" href="#api-destination"><span class="std std-ref">RNS.Destination</span></a> instance to which the packet will be sent.</p></li>
<li><p><strong>data</strong> β The data payload to be included in the packet as <em>bytes</em>.</p></li>
@@ -695,22 +870,22 @@ ephemeral keys, and offers <strong>Forward Secrecy</strong>.</p>
</dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Packet.ENCRYPTED_MDU">
-<span class="sig-name descname"><span class="pre">ENCRYPTED_MDU</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">383</span></em><a class="headerlink" href="#RNS.Packet.ENCRYPTED_MDU" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">ENCRYPTED_MDU</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">383</span></em><a class="headerlink" href="#RNS.Packet.ENCRYPTED_MDU" title="Permalink to this definition">#</a></dt>
<dd><p>The maximum size of the payload data in a single encrypted packet</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Packet.PLAIN_MDU">
-<span class="sig-name descname"><span class="pre">PLAIN_MDU</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">464</span></em><a class="headerlink" href="#RNS.Packet.PLAIN_MDU" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">PLAIN_MDU</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">464</span></em><a class="headerlink" href="#RNS.Packet.PLAIN_MDU" title="Permalink to this definition">#</a></dt>
<dd><p>The maximum size of the payload data in a single unencrypted packet</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Packet.send">
-<span class="sig-name descname"><span class="pre">send</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Packet.send" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">send</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Packet.send" title="Permalink to this definition">#</a></dt>
<dd><p>Sends the packet.</p>
<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A <a class="reference internal" href="#api-packetreceipt"><span class="std std-ref">RNS.PacketReceipt</span></a> instance if <em>create_receipt</em> was set to <em>True</em> when the packet was instantiated, if not returns <em>None</em>. If the packet could not be sent <em>False</em> is returned.</p>
</dd>
</dl>
@@ -718,10 +893,10 @@ ephemeral keys, and offers <strong>Forward Secrecy</strong>.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Packet.resend">
-<span class="sig-name descname"><span class="pre">resend</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Packet.resend" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">resend</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Packet.resend" title="Permalink to this definition">#</a></dt>
<dd><p>Re-sends the packet.</p>
<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A <a class="reference internal" href="#api-packetreceipt"><span class="std std-ref">RNS.PacketReceipt</span></a> instance if <em>create_receipt</em> was set to <em>True</em> when the packet was instantiated, if not returns <em>None</em>. If the packet could not be sent <em>False</em> is returned.</p>
</dd>
</dl>
@@ -732,16 +907,16 @@ ephemeral keys, and offers <strong>Forward Secrecy</strong>.</p>
<p id="api-packetreceipt"><h3> Packet Receipt </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.PacketReceipt">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">PacketReceipt</span></span><a class="headerlink" href="#RNS.PacketReceipt" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">PacketReceipt</span></span><a class="headerlink" href="#RNS.PacketReceipt" title="Permalink to this definition">#</a></dt>
<dd><p>The PacketReceipt class is used to receive notifications about
<a class="reference internal" href="#api-packet"><span class="std std-ref">RNS.Packet</span></a> instances sent over the network. Instances
of this class are never created manually, but always returned from
the <em>send()</em> method of a <a class="reference internal" href="#api-packet"><span class="std std-ref">RNS.Packet</span></a> instance.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.PacketReceipt.get_status">
-<span class="sig-name descname"><span class="pre">get_status</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.get_status" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_status</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.get_status" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The status of the associated <a class="reference internal" href="#api-packet"><span class="std std-ref">RNS.Packet</span></a> instance. Can be one of <code class="docutils literal notranslate"><span class="pre">RNS.PacketReceipt.SENT</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.PacketReceipt.DELIVERED</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.PacketReceipt.FAILED</span></code> or <code class="docutils literal notranslate"><span class="pre">RNS.PacketReceipt.CULLED</span></code>.</p>
</dd>
</dl>
@@ -749,9 +924,9 @@ the <em>send()</em> method of a <a class="reference internal" href="#api-packet"
<dl class="py method">
<dt class="sig sig-object py" id="RNS.PacketReceipt.get_rtt">
-<span class="sig-name descname"><span class="pre">get_rtt</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.get_rtt" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_rtt</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.get_rtt" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The round-trip-time in seconds</p>
</dd>
</dl>
@@ -759,10 +934,10 @@ the <em>send()</em> method of a <a class="reference internal" href="#api-packet"
<dl class="py method">
<dt class="sig sig-object py" id="RNS.PacketReceipt.set_timeout">
-<span class="sig-name descname"><span class="pre">set_timeout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeout</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.set_timeout" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_timeout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeout</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.set_timeout" title="Permalink to this definition">#</a></dt>
<dd><p>Sets a timeout in seconds</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>timeout</strong> β The timeout in seconds.</p>
</dd>
</dl>
@@ -770,10 +945,10 @@ the <em>send()</em> method of a <a class="reference internal" href="#api-packet"
<dl class="py method">
<dt class="sig sig-object py" id="RNS.PacketReceipt.set_delivery_callback">
-<span class="sig-name descname"><span class="pre">set_delivery_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.set_delivery_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_delivery_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.set_delivery_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Sets a function that gets called if a successfull delivery has been proven.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A <em>callable</em> with the signature <em>callback(packet_receipt)</em></p>
</dd>
</dl>
@@ -781,10 +956,10 @@ the <em>send()</em> method of a <a class="reference internal" href="#api-packet"
<dl class="py method">
<dt class="sig sig-object py" id="RNS.PacketReceipt.set_timeout_callback">
-<span class="sig-name descname"><span class="pre">set_timeout_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.set_timeout_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_timeout_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.PacketReceipt.set_timeout_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Sets a function that gets called if the delivery times out.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A <em>callable</em> with the signature <em>callback(packet_receipt)</em></p>
</dd>
</dl>
@@ -795,12 +970,12 @@ the <em>send()</em> method of a <a class="reference internal" href="#api-packet"
<p id="api-link"><h3> Link </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Link">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">established_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">closed_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">established_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">closed_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link" title="Permalink to this definition">#</a></dt>
<dd><p>This class is used to establish and manage links to other peers. When a
link instance is created, Reticulum will attempt to establish verified
and encrypted connectivity with the specified destination.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>destination</strong> β A <a class="reference internal" href="#api-destination"><span class="std std-ref">RNS.Destination</span></a> instance which to establish a link to.</p></li>
<li><p><strong>established_callback</strong> β An optional function or method with the signature <em>callback(link)</em> to be called when the link has been established.</p></li>
@@ -810,37 +985,37 @@ and encrypted connectivity with the specified destination.</p>
</dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Link.CURVE">
-<span class="sig-name descname"><span class="pre">CURVE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'Curve25519'</span></em><a class="headerlink" href="#RNS.Link.CURVE" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">CURVE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'Curve25519'</span></em><a class="headerlink" href="#RNS.Link.CURVE" title="Permalink to this definition">#</a></dt>
<dd><p>The curve used for Elliptic Curve DH key exchanges</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP">
-<span class="sig-name descname"><span class="pre">ESTABLISHMENT_TIMEOUT_PER_HOP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">5</span></em><a class="headerlink" href="#RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">ESTABLISHMENT_TIMEOUT_PER_HOP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">5</span></em><a class="headerlink" href="#RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP" title="Permalink to this definition">#</a></dt>
<dd><p>Timeout for link establishment in seconds per hop to destination.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Link.KEEPALIVE_TIMEOUT_FACTOR">
-<span class="sig-name descname"><span class="pre">KEEPALIVE_TIMEOUT_FACTOR</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">4</span></em><a class="headerlink" href="#RNS.Link.KEEPALIVE_TIMEOUT_FACTOR" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">KEEPALIVE_TIMEOUT_FACTOR</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">4</span></em><a class="headerlink" href="#RNS.Link.KEEPALIVE_TIMEOUT_FACTOR" title="Permalink to this definition">#</a></dt>
<dd><p>RTT timeout factor used in link timeout calculation.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Link.STALE_GRACE">
-<span class="sig-name descname"><span class="pre">STALE_GRACE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#RNS.Link.STALE_GRACE" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">STALE_GRACE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#RNS.Link.STALE_GRACE" title="Permalink to this definition">#</a></dt>
<dd><p>Grace period in seconds used in link timeout calculation.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Link.KEEPALIVE">
-<span class="sig-name descname"><span class="pre">KEEPALIVE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">360</span></em><a class="headerlink" href="#RNS.Link.KEEPALIVE" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">KEEPALIVE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">360</span></em><a class="headerlink" href="#RNS.Link.KEEPALIVE" title="Permalink to this definition">#</a></dt>
<dd><p>Interval for sending keep-alive packets on established links in seconds.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Link.STALE_TIME">
-<span class="sig-name descname"><span class="pre">STALE_TIME</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">720</span></em><a class="headerlink" href="#RNS.Link.STALE_TIME" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">STALE_TIME</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">720</span></em><a class="headerlink" href="#RNS.Link.STALE_TIME" title="Permalink to this definition">#</a></dt>
<dd><p>If no traffic or keep-alive packets are received within this period, the
link will be marked as stale, and a final keep-alive packet will be sent.
If after this no traffic or keep-alive packets are received within <code class="docutils literal notranslate"><span class="pre">RTT</span></code> *
@@ -850,13 +1025,13 @@ and will be torn down.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.identify">
-<span class="sig-name descname"><span class="pre">identify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">identity</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.identify" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">identify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">identity</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.identify" title="Permalink to this definition">#</a></dt>
<dd><p>Identifies the initiator of the link to the remote peer. This can only happen
once the link has been established, and is carried out over the encrypted link.
The identity is only revealed to the remote peer, and initiator anonymity is
thus preserved. This method can be used for authentication.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>identity</strong> β An RNS.Identity instance to identify as.</p>
</dd>
</dl>
@@ -864,10 +1039,10 @@ thus preserved. This method can be used for authentication.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.request">
-<span class="sig-name descname"><span class="pre">request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">response_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">failed_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">progress_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.request" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">response_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">failed_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">progress_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.request" title="Permalink to this definition">#</a></dt>
<dd><p>Sends a request to the remote peer.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>path</strong> β The request path.</p></li>
<li><p><strong>response_callback</strong> β An optional function or method with the signature <em>response_callback(request_receipt)</em> to be called when a response is received. See the <a class="reference internal" href="examples.html#example-request"><span class="std std-ref">Request Example</span></a> for more info.</p></li>
@@ -876,7 +1051,7 @@ thus preserved. This method can be used for authentication.</p>
<li><p><strong>timeout</strong> β An optional timeout in seconds for the request. If <em>None</em> is supplied it will be calculated based on link RTT.</p></li>
</ul>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A <a class="reference internal" href="#api-requestreceipt"><span class="std std-ref">RNS.RequestReceipt</span></a> instance if the request was sent, or <em>False</em> if it was not.</p>
</dd>
</dl>
@@ -884,9 +1059,9 @@ thus preserved. This method can be used for authentication.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.no_inbound_for">
-<span class="sig-name descname"><span class="pre">no_inbound_for</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.no_inbound_for" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">no_inbound_for</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.no_inbound_for" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The time in seconds since last inbound packet on the link.</p>
</dd>
</dl>
@@ -894,9 +1069,9 @@ thus preserved. This method can be used for authentication.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.no_outbound_for">
-<span class="sig-name descname"><span class="pre">no_outbound_for</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.no_outbound_for" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">no_outbound_for</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.no_outbound_for" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The time in seconds since last outbound packet on the link.</p>
</dd>
</dl>
@@ -904,9 +1079,9 @@ thus preserved. This method can be used for authentication.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.inactive_for">
-<span class="sig-name descname"><span class="pre">inactive_for</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.inactive_for" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">inactive_for</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.inactive_for" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The time in seconds since activity on the link.</p>
</dd>
</dl>
@@ -914,9 +1089,9 @@ thus preserved. This method can be used for authentication.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.get_remote_identity">
-<span class="sig-name descname"><span class="pre">get_remote_identity</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.get_remote_identity" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_remote_identity</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.get_remote_identity" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The identity of the remote peer, if it is known. Calling this method will not query the remote initiator to reveal its identity. Returns <code class="docutils literal notranslate"><span class="pre">None</span></code> if the link initiator has not already independently called the <code class="docutils literal notranslate"><span class="pre">identify(identity)</span></code> method.</p>
</dd>
</dl>
@@ -924,18 +1099,18 @@ thus preserved. This method can be used for authentication.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.teardown">
-<span class="sig-name descname"><span class="pre">teardown</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.teardown" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">teardown</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.teardown" title="Permalink to this definition">#</a></dt>
<dd><p>Closes the link and purges encryption keys. New keys will
be used if a new link to the same destination is established.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_link_closed_callback">
-<span class="sig-name descname"><span class="pre">set_link_closed_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_link_closed_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_link_closed_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_link_closed_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a link has been
torn down.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(link)</em> to be called.</p>
</dd>
</dl>
@@ -943,11 +1118,11 @@ torn down.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_packet_callback">
-<span class="sig-name descname"><span class="pre">set_packet_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_packet_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_packet_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_packet_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a packet has been
received over this link.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(message, packet)</em> to be called.</p>
</dd>
</dl>
@@ -955,13 +1130,13 @@ received over this link.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_resource_callback">
-<span class="sig-name descname"><span class="pre">set_resource_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_resource_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a resource has been
advertised over this link. If the function returns <em>True</em>
the resource will be accepted. If it returns <em>False</em> it will
be ignored.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(resource)</em> to be called. Please note that only the basic information of the resource is available at this time, such as <em>get_transfer_size()</em>, <em>get_data_size()</em>, <em>get_parts()</em> and <em>is_compressed()</em>.</p>
</dd>
</dl>
@@ -969,11 +1144,11 @@ be ignored.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_resource_started_callback">
-<span class="sig-name descname"><span class="pre">set_resource_started_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_started_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_resource_started_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_started_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a resource has begun
transferring over this link.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(resource)</em> to be called.</p>
</dd>
</dl>
@@ -981,11 +1156,11 @@ transferring over this link.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_resource_concluded_callback">
-<span class="sig-name descname"><span class="pre">set_resource_concluded_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_concluded_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_resource_concluded_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_concluded_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when a resource has concluded
transferring over this link.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(resource)</em> to be called.</p>
</dd>
</dl>
@@ -993,11 +1168,11 @@ transferring over this link.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_remote_identified_callback">
-<span class="sig-name descname"><span class="pre">set_remote_identified_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_remote_identified_callback" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_remote_identified_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_remote_identified_callback" title="Permalink to this definition">#</a></dt>
<dd><p>Registers a function to be called when an initiating peer has
identified over this link.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> β A function or method with the signature <em>callback(link, identity)</em> to be called.</p>
</dd>
</dl>
@@ -1005,13 +1180,13 @@ identified over this link.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Link.set_resource_strategy">
-<span class="sig-name descname"><span class="pre">set_resource_strategy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">resource_strategy</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_strategy" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">set_resource_strategy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">resource_strategy</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Link.set_resource_strategy" title="Permalink to this definition">#</a></dt>
<dd><p>Sets the resource strategy for the link.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>resource_strategy</strong> β One of <code class="docutils literal notranslate"><span class="pre">RNS.Link.ACCEPT_NONE</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.Link.ACCEPT_ALL</span></code> or <code class="docutils literal notranslate"><span class="pre">RNS.Link.ACCEPT_APP</span></code>. If <code class="docutils literal notranslate"><span class="pre">RNS.Link.ACCEPT_APP</span></code> is set, the <cite>resource_callback</cite> will be called to determine whether the resource should be accepted or not.</p>
</dd>
-<dt class="field-even">Raises<span class="colon">:</span></dt>
+<dt class="field-even">Raises</dt>
<dd class="field-even"><p><em>TypeError</em> if the resource strategy is unsupported.</p>
</dd>
</dl>
@@ -1022,15 +1197,15 @@ identified over this link.</p>
<p id="api-requestreceipt"><h3> Request Receipt </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.RequestReceipt">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">RequestReceipt</span></span><a class="headerlink" href="#RNS.RequestReceipt" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">RequestReceipt</span></span><a class="headerlink" href="#RNS.RequestReceipt" title="Permalink to this definition">#</a></dt>
<dd><p>An instance of this class is returned by the <code class="docutils literal notranslate"><span class="pre">request</span></code> method of <code class="docutils literal notranslate"><span class="pre">RNS.Link</span></code>
instances. It should never be instantiated manually. It provides methods to
check status, response time and response data when the request concludes.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.RequestReceipt.get_request_id">
-<span class="sig-name descname"><span class="pre">get_request_id</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_request_id" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_request_id</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_request_id" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The request ID as <em>bytes</em>.</p>
</dd>
</dl>
@@ -1038,9 +1213,9 @@ check status, response time and response data when the request concludes.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.RequestReceipt.get_status">
-<span class="sig-name descname"><span class="pre">get_status</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_status" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_status</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_status" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The current status of the request, one of <code class="docutils literal notranslate"><span class="pre">RNS.RequestReceipt.FAILED</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.RequestReceipt.SENT</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.RequestReceipt.DELIVERED</span></code>, <code class="docutils literal notranslate"><span class="pre">RNS.RequestReceipt.READY</span></code>.</p>
</dd>
</dl>
@@ -1048,9 +1223,9 @@ check status, response time and response data when the request concludes.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.RequestReceipt.get_progress">
-<span class="sig-name descname"><span class="pre">get_progress</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_progress" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_progress</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_progress" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The progress of a response being received as a <em>float</em> between 0.0 and 1.0.</p>
</dd>
</dl>
@@ -1058,9 +1233,9 @@ check status, response time and response data when the request concludes.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.RequestReceipt.get_response">
-<span class="sig-name descname"><span class="pre">get_response</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_response" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_response</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_response" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The response as <em>bytes</em> if it is ready, otherwise <em>None</em>.</p>
</dd>
</dl>
@@ -1068,9 +1243,9 @@ check status, response time and response data when the request concludes.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.RequestReceipt.get_response_time">
-<span class="sig-name descname"><span class="pre">get_response_time</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_response_time" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_response_time</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.RequestReceipt.get_response_time" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The response time of the request in seconds.</p>
</dd>
</dl>
@@ -1081,12 +1256,12 @@ check status, response time and response data when the request concludes.</p>
<p id="api-resource"><h3> Resource </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Resource">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Resource</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">link</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">advertise</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">auto_compress</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">progress_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Resource</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">link</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">advertise</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">auto_compress</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">progress_callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource" title="Permalink to this definition">#</a></dt>
<dd><p>The Resource class allows transferring arbitrary amounts
of data over a link. It will automatically handle sequencing,
compression, coordination and checksumming.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> β The data to be transferred. Can be <em>bytes</em> or an open <em>file handle</em>. See the <a class="reference internal" href="examples.html#example-filetransfer"><span class="std std-ref">Filetransfer Example</span></a> for details.</p></li>
<li><p><strong>link</strong> β The <a class="reference internal" href="#api-link"><span class="std std-ref">RNS.Link</span></a> instance on which to transfer the data.</p></li>
@@ -1099,22 +1274,22 @@ compression, coordination and checksumming.</p>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.advertise">
-<span class="sig-name descname"><span class="pre">advertise</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.advertise" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">advertise</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.advertise" title="Permalink to this definition">#</a></dt>
<dd><p>Advertise the resource. If the other end of the link accepts
the resource advertisement it will begin transferring.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.cancel">
-<span class="sig-name descname"><span class="pre">cancel</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.cancel" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">cancel</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.cancel" title="Permalink to this definition">#</a></dt>
<dd><p>Cancels transferring the resource.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.get_progress">
-<span class="sig-name descname"><span class="pre">get_progress</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_progress" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_progress</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_progress" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The current progress of the resource transfer as a <em>float</em> between 0.0 and 1.0.</p>
</dd>
</dl>
@@ -1122,9 +1297,9 @@ the resource advertisement it will begin transferring.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.get_transfer_size">
-<span class="sig-name descname"><span class="pre">get_transfer_size</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_transfer_size" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_transfer_size</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_transfer_size" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The number of bytes needed to transfer the resource.</p>
</dd>
</dl>
@@ -1132,9 +1307,9 @@ the resource advertisement it will begin transferring.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.get_data_size">
-<span class="sig-name descname"><span class="pre">get_data_size</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_data_size" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_data_size</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_data_size" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The total data size of the resource.</p>
</dd>
</dl>
@@ -1142,9 +1317,9 @@ the resource advertisement it will begin transferring.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.get_parts">
-<span class="sig-name descname"><span class="pre">get_parts</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_parts" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_parts</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_parts" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The number of parts the resource will be transferred in.</p>
</dd>
</dl>
@@ -1152,9 +1327,9 @@ the resource advertisement it will begin transferring.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.get_segments">
-<span class="sig-name descname"><span class="pre">get_segments</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_segments" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_segments</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_segments" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The number of segments the resource is divided into.</p>
</dd>
</dl>
@@ -1162,9 +1337,9 @@ the resource advertisement it will begin transferring.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.get_hash">
-<span class="sig-name descname"><span class="pre">get_hash</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_hash" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">get_hash</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.get_hash" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The hash of the resource.</p>
</dd>
</dl>
@@ -1172,9 +1347,9 @@ the resource advertisement it will begin transferring.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Resource.is_compressed">
-<span class="sig-name descname"><span class="pre">is_compressed</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.is_compressed" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">is_compressed</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Resource.is_compressed" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Whether the resource is compressed.</p>
</dd>
</dl>
@@ -1185,21 +1360,21 @@ the resource advertisement it will begin transferring.</p>
<p id="api-transport"><h3> Transport </h3></p>
<dl class="py class">
<dt class="sig sig-object py" id="RNS.Transport">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Transport</span></span><a class="headerlink" href="#RNS.Transport" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">RNS.</span></span><span class="sig-name descname"><span class="pre">Transport</span></span><a class="headerlink" href="#RNS.Transport" title="Permalink to this definition">#</a></dt>
<dd><p>Through static methods of this class you can interact with the
Transport system of Reticulum.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="RNS.Transport.PATHFINDER_M">
-<span class="sig-name descname"><span class="pre">PATHFINDER_M</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">128</span></em><a class="headerlink" href="#RNS.Transport.PATHFINDER_M" title="Permalink to this definition">ΒΆ</a></dt>
+<span class="sig-name descname"><span class="pre">PATHFINDER_M</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">128</span></em><a class="headerlink" href="#RNS.Transport.PATHFINDER_M" title="Permalink to this definition">#</a></dt>
<dd><p>Maximum amount of hops that Reticulum will transport a packet.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.register_announce_handler">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">register_announce_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">handler</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.register_announce_handler" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">register_announce_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">handler</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.register_announce_handler" title="Permalink to this definition">#</a></dt>
<dd><p>Registers an announce handler.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>handler</strong> β Must be an object with an <em>aspect_filter</em> attribute and a <em>received_announce(destination_hash, announced_identity, app_data)</em> callable. See the <a class="reference internal" href="examples.html#example-announce"><span class="std std-ref">Announce Example</span></a> for more info.</p>
</dd>
</dl>
@@ -1207,10 +1382,10 @@ Transport system of Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.deregister_announce_handler">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">deregister_announce_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">handler</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.deregister_announce_handler" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">deregister_announce_handler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">handler</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.deregister_announce_handler" title="Permalink to this definition">#</a></dt>
<dd><p>Deregisters an announce handler.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>handler</strong> β The announce handler to be deregistered.</p>
</dd>
</dl>
@@ -1218,12 +1393,12 @@ Transport system of Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.has_path">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">has_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.has_path" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">has_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.has_path" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>destination_hash</strong> β A destination hash as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>True</em> if a path to the destination is known, otherwise <em>False</em>.</p>
</dd>
</dl>
@@ -1231,12 +1406,12 @@ Transport system of Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.hops_to">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">hops_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.hops_to" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">hops_to</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.hops_to" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>destination_hash</strong> β A destination hash as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The number of hops to the specified destination, or <code class="docutils literal notranslate"><span class="pre">RNS.Transport.PATHFINDER_M</span></code> if the number of hops is unknown.</p>
</dd>
</dl>
@@ -1244,12 +1419,12 @@ Transport system of Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.next_hop">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">next_hop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.next_hop" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">next_hop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.next_hop" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>destination_hash</strong> β A destination hash as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The destination hash as <em>bytes</em> for the next hop to the specified destination, or <em>None</em> if the next hop is unknown.</p>
</dd>
</dl>
@@ -1257,12 +1432,12 @@ Transport system of Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.next_hop_interface">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">next_hop_interface</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.next_hop_interface" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">next_hop_interface</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.next_hop_interface" title="Permalink to this definition">#</a></dt>
<dd><dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>destination_hash</strong> β A destination hash as <em>bytes</em>.</p>
</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The interface for the next hop to the specified destination, or <em>None</em> if the interface is unknown.</p>
</dd>
</dl>
@@ -1270,12 +1445,12 @@ Transport system of Reticulum.</p>
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.request_path">
-<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">request_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">on_interface</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recursive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.request_path" title="Permalink to this definition">ΒΆ</a></dt>
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">request_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">on_interface</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recursive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.request_path" title="Permalink to this definition">#</a></dt>
<dd><p>Requests a path to the destination from the network. If
another reachable peer on the network knows a path, it
will announce it.</p>
<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>destination_hash</strong> β A destination hash as <em>bytes</em>.</p></li>
<li><p><strong>on_interface</strong> β If specified, the path request will only be sent on this interface. In normal use, Reticulum handles this automatically, and this parameter should not be used.</p></li>
@@ -1286,21 +1461,57 @@ will announce it.</p>
</dd></dl>
-</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+
+ <a class="prev-page" href="support.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Support Reticulum</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">API Reference</a><ul>
-<li><a class="reference internal" href="#classes">Classes</a><ul>
<li><a class="reference internal" href="#RNS.Reticulum"><code class="docutils literal notranslate"><span class="pre">Reticulum</span></code></a><ul>
<li><a class="reference internal" href="#RNS.Reticulum.MTU"><code class="docutils literal notranslate"><span class="pre">MTU</span></code></a></li>
<li><a class="reference internal" href="#RNS.Reticulum.ANNOUNCE_CAP"><code class="docutils literal notranslate"><span class="pre">ANNOUNCE_CAP</span></code></a></li>
@@ -1424,61 +1635,23 @@ will announce it.</p>
</li>
</ul>
</li>
-</ul>
-</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="examples.html"
- title="previous chapter">Code Examples</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="support.html"
- title="next chapter">Support Reticulum</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/reference.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="support.html" title="Support Reticulum"
- >next</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Code Examples"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">API Reference</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/search.html b/docs/manual/search.html
index ae8b7459..3fe585ef 100644
--- a/docs/manual/search.html
+++ b/docs/manual/search.html
@@ -1,100 +1,278 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" />
-<!DOCTYPE html>
-
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Search — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
-
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/><title>Search - Reticulum Network Stack 0.3.12 beta documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
- <script src="_static/searchtools.js"></script>
- <script src="_static/language_data.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="#" />
- <script src="searchindex.js" defer></script>
-
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Search</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <h1 id="search-documentation">Search</h1>
-
- <noscript>
- <div class="admonition warning">
- <p>
- Please activate JavaScript to enable the search
- functionality.
- </p>
- </div>
- </noscript>
-
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
- <p>
- Searching for multiple words only shows matches that contain
- all words.
- </p>
-
-
- <form action="" method="get">
- <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="search" />
- <span id="search-progress" style="padding-left: 10px"></span>
- </form>
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+ }
+ }
+ }
+</style></head>
+ <body>
+
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
+
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
- <div id="search-results">
-
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="#" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul>
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
- <div class="clearer"></div>
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
</div>
+ <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
</div>
+ <article role="main">
+
+<noscript>
+<div class="admonition error">
+ <p class="admonition-title">Error</p>
+ <p>
+ Please activate JavaScript to enable the search functionality.
+ </p>
+</div>
+</noscript>
+
+<div id="search-results"></div>
+
+ </article>
</div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
+ <footer>
+
+ <div class="related-pages">
+
+
</div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Search</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
+ </div>
+ </div>
+
+ </footer>
</div>
- </body>
+ <aside class="toc-drawer no-toc">
+
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+
+<script src="_static/searchtools.js"></script>
+<script src="_static/language_data.js"></script>
+<script src="searchindex.js"></script></body>
</html>
\ No newline at end of file
diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js
index 1a828144..39ec2a9d 100644
--- a/docs/manual/searchindex.js
+++ b/docs/manual/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["examples", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 1, 4, 5, 6, 8, 9, 10], "number": [0, 1, 4, 5, 6, 8, 9], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "includ": [0, 2, 3, 4, 6, 8], "sourc": [0, 1, 2, 5, 8, 10], "distribut": [0, 1, 5, 6, 8, 9], "reticulum": [0, 4, 5, 6], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "us": [0, 2, 3, 4, 5, 6, 8], "learn": [0, 1, 7, 8], "how": [0, 1, 2, 4, 5, 8, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9], "program": [0, 3, 4, 6, 8, 10], "The": [0, 1, 2, 3, 4, 5, 6, 10], "demonstr": [0, 4], "bare": 0, "minimum": [0, 4, 5, 8], "setup": [0, 1, 3, 4], "requir": [0, 1, 4, 5, 8, 9, 10], "connect": [0, 2, 3, 4, 5, 6, 8, 9, 10], "network": [0, 2, 4, 6, 8, 9, 10], "from": [0, 1, 2, 4, 5, 6, 8, 9, 10], "In": [0, 1, 2, 4, 5, 6, 8, 9, 10], "about": [0, 1, 2, 4, 5, 6, 8], "five": 0, "line": [0, 1, 2, 4, 5, 8, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 6, 8, 9, 10], "initialis": [0, 6, 9], "readi": [0, 1, 2, 4, 5, 6, 10], "pass": [0, 2, 4, 5, 6, 8, 9], "traffic": [0, 1, 4, 5, 6, 8, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "rn": [0, 1, 6, 8, 9], "start": [0, 2, 3, 4, 6, 8, 9], "up": [0, 1, 2, 4, 5, 8, 9, 10], "gener": [0, 1, 2, 4, 5, 6, 8, 9, 10], "new": [0, 4, 5, 6, 8, 9], "destin": [0, 1, 3, 4, 5, 6, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9], "send": [0, 4, 6, 8, 9], "an": [0, 1, 2, 4, 5, 6, 8, 9, 10], "import": [0, 1, 2, 4, 5, 7, 8], "argpars": 0, "": [0, 1, 4, 5, 8, 9, 10], "defin": [0, 4, 8, 9], "app": [0, 1, 6, 8], "name": [0, 3, 4, 5, 6], "we": [0, 1, 2, 4, 7, 8], "ll": [0, 1, 10], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "sinc": [0, 1, 4, 5, 6, 8], "basic": [0, 1, 3, 6, 9], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "part": [0, 4, 5, 6, 8], "rang": [0, 1, 2, 4, 5, 8, 9, 10], "util": [0, 2, 3, 4, 8], "put": [0, 2, 4], "them": [0, 1, 2, 4, 5, 7, 8, 9], "within": [0, 1, 4, 5, 6, 8], "namespac": 0, "example_util": [0, 9], "app_nam": [0, 6], "execut": [0, 1, 4, 6, 9], "when": [0, 1, 2, 4, 5, 6, 8, 9], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 1, 4, 5, 6, 8], "first": [0, 1, 4, 6, 8, 9], "randomli": [0, 8], "ident": [0, 1, 3, 6, 9, 10], "our": [0, 8], "just": [0, 1, 2, 4, 5, 8, 10], "endpoint": [0, 5, 6, 8], "address": [0, 1, 4, 5, 6, 8, 10], "commun": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "also": [0, 1, 2, 4, 5, 6, 8, 9, 10], "exist": [0, 1, 2, 4, 8, 9, 10], "which": [0, 1, 4, 5, 6, 8, 9], "know": [0, 1, 2, 5, 6, 8], "thei": [0, 1, 4, 5, 6, 8, 9], "reachabl": [0, 1, 4, 5, 6, 8, 9], "autoomat": 0, "path": [0, 1, 2, 4, 6, 8, 9], "anywher": [0, 4], "els": [0, 5, 8], "IN": [0, 6], "singl": [0, 4, 6, 8, 9, 10], "minimalsampl": 0, "configur": [0, 1, 2, 3, 4, 5, 6, 8, 10], "automat": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prove": [0, 8], "packet": [0, 1, 2, 3, 4, 5, 6, 9, 10], "adress": [0, 6, 8], "By": [0, 1, 4, 6, 8, 9], "do": [0, 1, 2, 4, 6, 8, 10], "proof": [0, 6, 8, 9], "each": [0, 1, 4, 5, 8, 9], "incom": [0, 4, 6, 9], "transmit": [0, 4, 8], "back": [0, 4, 8, 10], "sender": [0, 1, 5, 8, 9], "anyon": [0, 1, 2, 5, 6, 8, 9], "tri": 0, "whether": [0, 4, 6, 8], "wa": [0, 2, 4, 5, 6, 8, 10], "receiv": [0, 1, 4, 6, 8, 9], "correctli": 0, "set_proof_strategi": [0, 6], "prove_al": [0, 6], "everyth": [0, 5, 8], "hand": [0, 1], "over": [0, 2, 3, 4, 6, 8, 9, 10], "control": [0, 1, 2, 3, 5, 6, 8], "loop": 0, "announceloop": 0, "log": [0, 4, 9], "prettyhexrep": 0, "hash": [0, 1, 6, 8, 9], "run": [0, 1, 2, 4, 5, 6, 8, 9, 10], "hit": 0, "enter": [0, 9], "manual": [0, 1, 4, 5, 6, 9], "ctrl": 0, "c": [0, 5], "quit": 0, "until": [0, 4, 6], "exit": [0, 1, 6, 9], "If": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server": [0, 1, 2, 3, 9], "client": [0, 1, 2, 3, 6], "messag": [0, 1, 6, 8, 9], "direct": [0, 1, 2, 5, 6, 8, 9], "toward": [0, 4, 8], "while": [0, 1, 2, 4, 5, 6, 8, 10], "true": [0, 4, 6, 9], "input": [0, 9], "sent": [0, 1, 6, 8, 9], "startup": 0, "get": [0, 2, 3, 4, 6, 10], "pars": 0, "desir": [0, 2, 4, 8], "mode": [0, 1, 2, 3, 8, 9, 10], "__name__": 0, "__main__": 0, "try": [0, 3, 4], "parser": 0, "argumentpars": 0, "descript": [0, 9], "add_argu": 0, "config": [0, 1, 2, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 4, 6, 8, 9], "help": [0, 2, 5, 7, 8, 9, 10], "altern": [0, 4, 9], "directori": [0, 9], "type": [0, 1, 3, 4, 5, 6, 9], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 4], "keyboardinterrupt": 0, "print": [0, 4, 9], "found": [0, 1, 4, 5, 8, 9], "http": [0, 1, 7], "github": [0, 1, 7], "com": [0, 1, 7], "markqvist": [0, 1, 7], "blob": [0, 8], "master": [0, 6], "py": [0, 1, 8], "build": [0, 1, 2, 3, 4, 8, 10], "upon": [0, 8], "previou": 0, "explor": [0, 8, 10], "notif": [0, 6], "relev": [0, 2, 4, 6, 8, 9], "set": [0, 1, 2, 4, 5, 6, 8, 9, 10], "callback": [0, 6], "applic": [0, 4, 5, 6, 8, 9], "arriv": [0, 8], "random": [0, 6, 8], "two": [0, 1, 2, 4, 5, 8], "list": [0, 1, 2, 4, 6, 8, 10], "string": [0, 6], "app_data": [0, 6], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 1], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 1, 2, 5, 8, 10], "destination_1": 0, "destination_2": 0, "handler": [0, 6], "onli": [0, 1, 2, 4, 5, 6, 8, 9, 10], "ask": [0, 2, 6], "chang": [0, 1, 4, 6, 8, 9, 10], "filter": [0, 5, 8], "see": [0, 1, 4, 5, 6, 8, 9, 10], "what": [0, 1, 3, 6, 8], "happen": [0, 6, 8], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 6], "regist": [0, 6], "transport": [0, 1, 3, 4, 5, 6, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 4, 6, 8, 9, 10], "len": 0, "1": [0, 4, 6, 8, 9], "data": [0, 1, 3, 4, 5, 6, 8, 10], "encod": 0, "utf": 0, "8": [0, 4, 9], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "class": [0, 3, 5, 10], "method": [0, 1, 4, 6, 8], "take": [0, 1, 4, 8, 9, 10], "option": [0, 1, 2, 3, 5, 6, 8, 9], "argument": [0, 6, 9], "instanc": [0, 3, 4, 6, 8, 9], "some": [0, 1, 2, 4, 5, 8, 9], "want": [0, 1, 2, 4, 5, 8, 9, 10], "aspect": [0, 2, 4, 6, 8], "__init__": 0, "self": [0, 5, 10], "call": [0, 5, 6, 8, 10], "system": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10], "match": [0, 4, 8], "specif": [0, 2, 3, 4, 6, 10], "cannot": [0, 1], "wildcard": 0, "received_announc": [0, 6], "destination_hash": [0, 6, 9], "announced_ident": [0, 6], "contain": [0, 5, 6, 8, 9], "follow": [0, 1, 2, 4, 7, 8, 9, 10], "decod": 0, "plaintext": [0, 6], "unencrypt": [0, 6, 8], "inform": [0, 1, 3, 4, 5, 6, 8, 9], "ani": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "listen": [0, 4, 8, 9], "sy": 0, "channel": [0, 4, 5, 7, 8, 10], "did": 0, "one": [0, 1, 2, 4, 5, 6, 8, 9, 10], "public_inform": 0, "ad": [0, 2, 3, 4, 5, 6, 8, 10], "so": [0, 1, 2, 4, 5, 6, 7, 8, 10], "differ": [0, 1, 2, 4, 5, 6, 8, 9, 10], "plain": [0, 4, 6, 8], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 1, 2, 4, 5, 6, 9], "everi": [0, 4, 5, 6, 8], "time": [0, 1, 2, 4, 5, 6, 8, 9], "set_packet_callback": [0, 6], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 1, 2, 4, 5, 8, 9], "out": [0, 1, 2, 4, 5, 6, 8, 9, 10], "r": [0, 4, 8, 9], "n": [0, 8, 9], "end": [0, 4, 5, 6, 8, 10], "stdout": [0, 4, 9], "flush": 0, "text": [0, 1, 5, 8], "prompt": 0, "channelarg": 0, "between": [0, 4, 5, 6, 8], "interfac": [0, 2, 3, 5, 6, 9], "simpl": [0, 2, 8, 9, 10], "respond": [0, 6], "receipt": [0, 6, 8], "choos": [0, 1, 4, 8], "global": [0, 1, 4, 5, 8, 10], "server_ident": 0, "queri": [0, 1, 6], "abl": [0, 1, 4, 5, 6, 8, 9], "verifi": [0, 6, 8], "repli": [0, 9], "encrypt": [0, 1, 5, 6, 8, 10], "wai": [0, 1, 4, 5, 8], "certain": [0, 4, 5, 7, 8], "than": [0, 1, 4, 5, 8], "read": [0, 1, 4, 6, 8, 9], "echo_destin": 0, "tell": [0, 4], "function": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], "server_callback": 0, "wait": [0, 4, 8, 9], "go": [0, 1, 4, 8], "handl": [0, 2, 4, 5, 6, 8, 9, 10], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 4], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 6, 9], "binari": [0, 1, 8], "represent": 0, "command": [0, 1, 4, 9], "dest_len": 0, "truncated_hashlength": [0, 6], "2": [0, 4, 6, 8, 9], "rais": [0, 6], "valueerror": [0, 6], "length": [0, 4, 6, 8], "invalid": [0, 6], "hex": 0, "hexadecim": [0, 8, 9], "charact": 0, "byte": [0, 6, 8, 9, 10], "format": [0, 3, 10], "fromhex": 0, "e": [0, 5], "check": [0, 1, 6, 8], "overrid": 0, "loglevel": [0, 6, 9], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 10], "feedback": [0, 3], "log_info": 0, "doe": [0, 1, 2, 3, 4, 5, 6, 8, 9], "load": [0, 1, 6, 9], "has_path": [0, 6], "To": [0, 1, 2, 4, 5, 8, 9, 10], "public": [0, 3, 4, 6], "kei": [0, 3, 5, 6, 10], "done": [0, 1, 4, 5, 8, 9], "recal": [0, 6], "modul": [0, 1, 2, 8, 9, 10], "known": [0, 6, 8, 9], "return": [0, 6, 9], "outgo": [0, 4, 6, 8, 9], "got": 0, "correct": [0, 8], "convent": 0, "request_destin": 0, "add": [0, 1, 4, 5, 9], "echo_request": 0, "get_random_hash": [0, 6], "successfulli": [0, 8], "packetreceipt": [0, 3, 6], "packet_receipt": [0, 6], "set_timeout": [0, 6], "set_timeout_callback": [0, 6], "packet_timed_out": 0, "deliveri": [0, 1, 6, 10], "set_delivery_callback": [0, 6], "packet_deliv": 0, "yet": [0, 4, 8], "request_path": [0, 6], "statu": [0, 1, 3, 4, 6, 8, 9], "deliv": [0, 6], "rtt": [0, 6, 8], "get_rtt": [0, 6], "round": [0, 6, 9], "3": [0, 4, 8, 9, 10], "rttstring": 0, "second": [0, 4, 6, 8, 9, 10], "1000": 0, "millisecond": [0, 9], "proof_packet": 0, "valid": [0, 4, 6, 8, 9], "trip": [0, 6, 9], "fail": [0, 6], "store_tru": 0, "t": [0, 1, 4, 5, 6, 9], "metavar": 0, "float": [0, 6], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 1, 4, 5, 6, 10], "remot": [0, 6, 9], "forth": 0, "o": [0, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 6], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 6], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 1, 4, 6, 8], "last": [0, 4, 6], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 9], "begin": [0, 2, 6], "And": 0, "client_packet_receiv": 0, "close": [0, 5, 6, 9], "link_establish": 0, "link_clos": 0, "interact": [0, 1, 6, 8, 9], "client_loop": 0, "becom": [0, 1, 5, 8], "should_quit": 0, "fals": [0, 4, 6, 9], "should": [0, 1, 2, 4, 5, 6, 8, 9, 10], "q": [0, 9], "teardown": [0, 6], "mdu": 0, "size": [0, 1, 4, 6, 8, 9], "exce": [0, 4, 6], "log_error": 0, "error": [0, 1, 7, 9], "ha": [0, 1, 2, 4, 5, 6, 8, 10], "been": [0, 1, 2, 4, 5, 6, 8, 10], "later": [0, 1, 4], "teardown_reason": 0, "now": [0, 1, 5, 8, 9], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 4, 6, 9], "_exit": 0, "identifi": [0, 4, 6, 8, 9], "intiat": 0, "onc": [0, 1, 2, 4, 5, 6, 8, 9, 10], "initi": [0, 5, 6, 8, 10], "peer": [0, 1, 4, 6, 8, 9], "identifyexampl": 0, "set_remote_identified_callback": [0, 6], "remote_identifi": 0, "origin": [0, 5, 8], "displai": [0, 8], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 6], "client_ident": 0, "sendig": 0, "perform": [0, 1, 4, 5, 8], "random_text_gener": 0, "request_id": [0, 6], "remote_ident": [0, 6], "requested_at": [0, 6], "look": [0, 1, 4, 8, 9], "On": [0, 1, 4, 9], "full": [0, 4, 6, 8, 9, 10], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 8, 9], "awai": [0, 4, 5, 8, 9], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 6], "response_gener": [0, 6], "allow": [0, 1, 2, 4, 5, 6, 8, 9, 10], "allow_al": [0, 6], "response_callback": [0, 6], "got_respons": 0, "failed_callback": [0, 6], "request_fail": 0, "request_receipt": [0, 6], "request_receiv": 0, "implement": [0, 4, 5, 6, 7, 8, 10], "file": [0, 1, 2, 4, 5, 6, 8, 9, 10], "download": [0, 4, 9], "resourc": [0, 1, 3, 6, 7], "effici": [0, 1, 4, 8, 10], "serv": [0, 2, 4, 5, 8, 9], "pleas": [0, 1, 4, 6, 9, 10], "note": [0, 1, 2, 4, 6, 8, 9], "larg": [0, 2, 4, 5, 6, 8, 10], "transfer": [0, 6, 8, 9, 10], "recommend": [0, 1, 2, 8], "compress": [0, 6, 8], "hashmap": 0, "sequenc": [0, 6, 8, 10], "long": [0, 1, 2, 4, 8], "slow": [0, 4, 8], "cpu": [0, 8], "probabl": [0, 5, 8, 9, 10], "result": [0, 8, 9], "befor": [0, 1, 4, 6, 8, 9], "complet": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prepar": [0, 5], "bundl": 0, "instead": [0, 1, 4, 8, 9], "slice": 0, "chunk": 0, "suitabl": [0, 1, 4, 5, 8, 10], "pack": 0, "thread": 0, "vendor": [0, 2], "umsgpack": 0, "app_timeout": 0, "45": [0, 8], "serve_path": 0, "here": [0, 1, 2, 4, 8, 9], "conveni": 0, "list_fil": 0, "entri": [0, 1, 8], "actual": [0, 1, 4, 8], "listdir": 0, "isfil": 0, "join": [0, 1, 5, 7, 8], "host": [0, 1, 4, 8, 9], "still": [0, 1, 2, 5, 8], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 5], "mani": [0, 1, 2, 4, 5, 6, 8, 9, 10], "split": 0, "filelist": 0, "multipl": [0, 4, 5, 8, 9], "hint": 0, "alreadi": [0, 1, 2, 5, 6, 8, 9], "support": [0, 1, 3, 5, 8, 10], "after": [0, 4, 5, 6, 8, 9], "re": [0, 4, 6, 8], "keep": [0, 5, 6, 8, 9, 10], "open": [0, 2, 4, 5, 6, 7, 8, 9, 10], "client_request": 0, "longer": [0, 5, 8, 9], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 4], "don": [0, 1, 2, 5, 6, 9], "unknown": [0, 4, 6, 8], "conclud": [0, 6], "hasattr": 0, "avail": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server_fil": 0, "current": [0, 1, 2, 3, 4, 6, 8], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 4, 7], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 4, 6, 8, 9], "normal": [0, 4, 6], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 6], "set_resource_strategi": [0, 6], "accept_al": [0, 6], "set_resource_started_callback": [0, 6], "download_began": 0, "set_resource_concluded_callback": [0, 6], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 2, 4, 6], "request_packet": 0, "create_receipt": [0, 6], "print_menu": 0, "25": [0, 3, 10], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 1, 4, 5, 8], "state": 0, "It": [0, 1, 2, 4, 6, 8, 9, 10], "uninterest": 0, "won": 0, "detail": [0, 1, 3, 4, 6, 9, 10], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 6], "100": [0, 4, 8], "rprogress": 0, "save_error": 0, "could": [0, 1, 4, 5, 6, 8, 10], "disk": [0, 6], "hour": [0, 4], "rem": 0, "divmod": 0, "3600": [0, 4], "minut": [0, 1, 4, 8], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 8], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 3, 9], "suffix": 0, "b": [0, 5, 9], "ttransfer": 0, "press": 0, "index": [0, 1, 3], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 1, 6], "local": [0, 1, 4, 5, 6, 8, 9, 10], "unpackb": 0, "append": [0, 8], "visibl": 0, "updat": [0, 1, 6, 8], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9], "target": [0, 4, 9], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 6, 10], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 6, 7, 8], "readabl": [0, 6, 8], "num": 0, "unit": [0, 1, 9], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 8], "pi": [0, 5, 8, 9, 10], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 1, 8, 9], "g": 0, "p": [0, 9], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 6, 8], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "other": [1, 2, 4, 5, 6, 8, 9], "even": [1, 2, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 10], "These": [1, 4, 8, 9], "feel": 1, "work": [1, 2, 4, 5, 8, 9, 10], "design": [1, 2, 5, 8, 10], "well": [1, 2, 4, 5, 6, 8, 10], "lora": [1, 2, 3, 8, 10], "wifi": [1, 3, 4, 5, 8, 9, 10], "wire": [1, 2, 3, 4, 10], "ethernet": [1, 2, 4, 5, 8, 10], "combin": [1, 3, 5, 8], "As": [1, 2, 4, 5, 6, 8, 10], "easi": [1, 2, 4, 8, 9, 10], "experi": [1, 8], "without": [1, 2, 5, 8, 10], "transceiv": [1, 2, 4, 8, 10], "infrastructur": [1, 2, 4, 5, 8, 9], "launch": [1, 9], "separ": [1, 4, 5, 8, 9], "devic": [1, 2, 3, 4, 5, 6, 8, 9], "same": [1, 2, 4, 5, 6, 8, 9], "enough": [1, 2, 8], "physic": [1, 2, 4, 8, 9], "termin": [1, 6], "suit": [1, 2, 8, 9], "featur": [1, 7, 8, 10], "both": [1, 2, 4, 5, 6, 8, 9, 10], "delai": [1, 4, 8, 9], "offlin": 1, "share": [1, 5, 6, 8, 9], "browser": 1, "page": [1, 3, 8], "dynam": [1, 9], "render": 1, "authent": [1, 4, 5, 6, 8, 9, 10], "more": [1, 2, 4, 5, 6, 8, 9, 10], "face": [1, 4], "protocol": [1, 2, 3, 4, 10], "lxmf": 1, "anoth": [1, 6, 8, 9], "project": 1, "instal": [1, 3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 2, 9], "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "similar": [1, 2, 4, 5, 9, 10], "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "earli": [1, 2], "stage": [1, 8], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 9], "manag": [1, 5, 6, 8, 9], "rnsd": [1, 3], "background": [1, 4], "foreground": 1, "servic": [1, 3, 5], "rnstatu": [1, 3, 4, 8], "rnpath": [1, 3, 4], "rnprobe": [1, 3], "view": [1, 4, 8, 9], "chapter": [1, 2, 4, 5, 6, 8, 9, 10], "locat": [1, 2, 5, 8, 9], "edit": [1, 9], "rnsconfig": 1, "broadcast": [1, 3, 4, 6, 8], "domain": [1, 4], "further": [1, 3, 4], "exampl": [1, 2, 3, 4, 6, 8, 9, 10], "tcp": [1, 2, 3, 5, 8, 10], "There": [1, 5, 8, 10], "subnet": [1, 5], "rout": [1, 4, 5, 6, 8, 9, 10], "tabl": [1, 4, 5, 8, 9], "thing": 1, "discov": [1, 4], "topographi": [1, 5, 8], "situat": [1, 2, 4, 5, 8], "where": [1, 2, 3, 4, 5, 6, 8, 9], "utilis": [1, 5, 6, 9, 10], "extern": [1, 4, 6, 10], "often": [1, 4, 5, 8, 9], "suffici": [1, 4, 8, 9], "act": [1, 6, 8, 9], "gatewai": [1, 4, 5, 8], "enabl": [1, 2, 4, 5, 6, 8, 9], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "i2p": [1, 3, 10], "carefulli": 1, "tcpserverinterfac": [1, 4], "access": [1, 3, 4, 5, 6, 9], "ip": [1, 2, 4, 8, 9, 10], "faster": [1, 4, 8], "lower": [1, 4, 9], "latenc": [1, 8, 10], "energi": 1, "i2pinterfac": [1, 4], "howev": [1, 5, 8], "leak": 1, "reveal": [1, 6, 8, 10], "who": [1, 8], "inspect": [1, 4, 5, 8], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "like": [1, 2, 4, 5, 6, 8, 9, 10], "transmiss": [1, 4, 6, 8], "though": [1, 2, 4, 8], "publicli": 1, "most": [1, 2, 4, 5, 8, 9], "anymor": 1, "through": [1, 2, 4, 5, 6, 8, 9, 10], "invis": [1, 4], "daemon": [1, 4, 6, 9], "parallel": 1, "For": [1, 2, 4, 5, 6, 8, 10], "alwai": [1, 4, 6, 8, 9], "node": [1, 3, 4, 5, 9, 10], "i2pd": [1, 4], "mix": [1, 4, 5, 9], "hide": 1, "relai": 1, "extra": [1, 4, 5, 9], "comput": [1, 8, 10], "power": [1, 2, 4, 8], "attack": 1, "form": [1, 4, 5, 6, 8], "deep": 1, "much": [1, 4, 5, 8, 9], "difficult": [1, 2], "non": [1, 6, 8], "behind": [1, 8], "firewal": [1, 4], "nat": 1, "preserv": [1, 6], "anonym": [1, 5, 6, 8, 10], "care": [1, 2, 6, 10], "slightli": 1, "experiment": [1, 2, 10], "made": [1, 6, 8], "dublin": 1, "hub": [1, 4], "tcpclientinterfac": [1, 2, 4], "ye": [1, 4, 8, 9], "target_host": [1, 4], "target_port": [1, 4], "4965": [1, 9], "frankfurt": [1, 9], "5377": 1, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 1, "b32": [1, 4], "point": [1, 2, 4, 5, 8, 9], "absolut": [1, 2, 7, 10], "usag": [1, 3, 4, 6, 7, 9], "occasion": 1, "test": [1, 2, 8], "failur": [1, 4], "guarante": [1, 8], "compat": [1, 2, 4, 6, 8], "hardwar": [1, 3, 4, 5, 6, 8, 9, 10], "wide": [1, 2, 4, 8, 10], "section": [1, 2, 4, 5, 8, 9], "easili": [1, 4, 5, 8, 9, 10], "cheapli": 1, "rnode": [1, 3, 8, 9, 10], "purpos": [1, 2, 4, 6, 8], "digit": [1, 2, 8, 10], "integr": [1, 5, 8], "yourself": [1, 8, 10], "custom": [1, 4, 6, 8, 10], "firmwar": [1, 2, 8], "board": [1, 3, 8, 10], "auto": [1, 2, 3, 6, 8], "script": [1, 2], "prefer": [1, 8], "purchas": [1, 5, 8, 10], "supplier": [1, 3], "addit": [1, 2, 4, 8, 9, 10], "privat": [1, 4, 6, 7, 8, 10], "secur": [1, 8, 10], "uncensor": 1, "mesh": [1, 4, 5, 10], "think": 1, "welcom": 1, "head": 1, "discuss": [1, 2, 8], "propos": 1, "easiest": [1, 2, 4, 8], "releas": [1, 2, 4, 8], "abov": [1, 2, 4, 8, 9], "next": [1, 5, 6, 8], "step": [1, 2], "pyseri": 1, "netifac": 1, "api": [1, 3, 8, 10], "associ": [1, 6, 8], "case": [1, 2, 4, 5, 8, 9], "recip": 1, "cryptographi": [1, 8, 10], "clone": 1, "repositori": [1, 7, 8], "git": 1, "move": [1, 4, 8], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "python3": [1, 2], "echo": [1, 3, 9], "unless": [1, 4, 6, 8], "ve": 1, "immedi": [1, 4, 9], "necessari": [1, 2, 4, 5, 6, 8], "nano": 1, "repeat": 1, "process": [1, 2, 4, 6, 8], "h": [1, 9], "ping": [1, 9], "replac": [1, 8, 9], "below": [1, 2, 4, 9], "3e12fc71692f8ec47bc5": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 6, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "packag": [1, 4, 8], "sudo": [1, 9], "apt": 1, "relat": 1, "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "io": [1, 2, 9], "pre": [1, 2, 6, 8], "wheel": 1, "standard": [1, 2, 8], "sure": [1, 2, 9], "pkg": 1, "upgrad": [1, 8], "Then": 1, "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "platform": [1, 2, 8], "compil": 1, "export": 1, "cargo_build_target": 1, "aarch64": 1, "sever": [1, 5, 6, 9], "succe": 1, "softwar": [1, 2, 4, 8, 10], "possibl": [1, 2, 4, 5, 6, 8, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "rare": [1, 4], "obscur": 1, "unusu": 1, "rnspure": 1, "content": [1, 5, 9], "No": [1, 4, 8, 9, 10], "matter": [1, 4], "perfectli": 1, "serial": [1, 2, 3, 8, 10], "pyca": [1, 8], "cryptograph": [1, 3, 5, 10], "primit": [1, 3], "One": [2, 6], "truli": [2, 8], "valuabl": [2, 7], "almost": [2, 4, 8, 9], "conceiv": 2, "kind": [2, 4, 5, 8], "medium": [2, 4, 5, 6, 8, 10], "flexibl": [2, 4, 10], "cover": [2, 8, 10], "wireless": [2, 5], "decad": 2, "old": [2, 7, 8], "radio": [2, 3, 4, 5, 6, 8, 9, 10], "modem": [2, 4, 5, 6, 8, 10], "modern": [2, 8], "millimet": 2, "wave": 2, "backhaul": [2, 5], "oper": [2, 4, 5, 6, 8, 9, 10], "good": [2, 5, 8, 9], "chanc": 2, "box": 2, "glue": 2, "littl": [2, 8], "effort": 2, "pipeinterfac": [2, 4], "kiss": [2, 3, 9, 10], "simplyequip": 2, "broad": 2, "abund": 2, "sometim": 2, "especi": [2, 4], "scratch": 2, "real": [2, 5, 10], "world": [2, 5, 10], "minim": [2, 3, 8], "cost": [2, 8, 10], "fundament": [2, 8], "categori": 2, "emploi": [2, 8], "reliabl": [2, 4, 5, 8, 10], "commonli": 2, "either": [2, 4, 5, 8, 9], "expens": 2, "hard": 2, "hungri": 2, "attempt": [2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8], "band": [2, 8], "scheme": 2, "limit": [2, 5, 8], "common": [2, 3, 5, 8, 9, 10], "ism": [2, 8], "avoid": [2, 8, 9], "confus": [2, 8], "layer": [2, 4, 5, 8, 10], "noth": [2, 10], "lorawan": [2, 8], "central": [2, 5, 8], "iot": 2, "raw": 2, "overhead": [2, 4, 8], "high": [2, 4, 8, 10], "level": [2, 4, 8, 9], "directli": [2, 4, 6, 8, 9, 10], "replic": [2, 8], "across": [2, 5], "togeth": [2, 8, 9], "tool": [2, 8, 9, 10], "exact": [2, 4, 8], "explain": [2, 6], "approach": [2, 8, 9], "develop": [2, 3, 6, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": 2, "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": 2, "autoinstal": 2, "seri": 2, "question": [2, 4], "consid": [2, 6, 8, 10], "newest": [2, 8], "version": [2, 8, 9], "stabil": 2, "paramet": [2, 4, 5, 6, 8], "port": [2, 3, 4, 5, 8, 10], "air": [2, 10], "id": [2, 4, 6, 8, 9], "itself": [2, 3, 8], "touch": [2, 10], "produc": 2, "short": [2, 8, 9], "fulli": [2, 8, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [2, 3, 4, 5, 6, 9, 10], "dhcp": [2, 4, 9], "dn": 2, "least": [2, 4, 8, 9, 10], "transpar": [2, 4, 8, 9], "capac": [2, 4, 6, 8], "distanc": [2, 8], "ubiqu": 2, "airmax": 2, "ltu": 2, "mikrotik": 2, "exhaust": [2, 8], "rel": [2, 8, 10], "cheap": [2, 8], "co": [2, 4, 10], "concurr": [2, 8, 9], "pattern": [2, 8], "gain": [2, 6, 8], "antenna": 2, "backbon": 2, "area": [2, 4, 5, 8, 10], "aim": [3, 8], "particip": [3, 5, 8], "caveat": 3, "emptor": 3, "fast": [3, 4, 6, 8], "base": [3, 4, 5, 6, 8, 9, 10], "nomad": 3, "sideband": 3, "With": [3, 4, 5, 8, 9], "internet": [3, 4, 8, 10], "testnet": [3, 9], "arm64": 3, "android": 3, "pure": [3, 8], "python": [3, 8, 9, 10], "rncp": 3, "rnx": 3, "improv": [3, 4, 7], "fix": [3, 8], "motiv": 3, "goal": [3, 4], "introduct": 3, "announc": [3, 6, 9], "mechan": [3, 4], "reach": [3, 4, 5], "prioritis": [3, 4, 5, 6], "propag": [3, 4, 6], "rule": [3, 4], "udp": [3, 5, 8, 9, 10], "pipe": [3, 10], "ax": [3, 10], "concept": [3, 8, 9], "overview": [3, 4, 8], "interconnect": [3, 4, 8], "site": [3, 4], "growth": 3, "converg": [3, 8], "identif": [3, 4, 10], "request": [3, 4, 6, 8, 9], "respons": [3, 6, 8], "requestreceipt": [3, 6], "donat": 3, "contribut": 3, "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": 4, "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8], "os": 4, "interface_en": [4, 9], "isol": [4, 9], "lan": 4, "group": [4, 6, 8], "group_id": 4, "kernel": [4, 9, 10], "wlan0": 4, "eth1": 4, "Or": [4, 9, 10], "ignor": [4, 6, 8], "ones": [4, 9], "ignored_devic": 4, "tun0": 4, "eth0": 4, "multicast": 4, "autodiscov": 4, "discoveri": [4, 8, 9], "scope": 4, "admin": 4, "organis": [4, 5, 7], "custom_network_nam": 4, "discovery_scop": 4, "discovery_port": 4, "48555": 4, "data_port": 4, "49555": 4, "frequent": 4, "block": 4, "inbound": [4, 6], "portabl": [4, 8], "persist": [4, 9], "achiev": [4, 6, 8], "geti2p": 4, "net": 4, "websit": 4, "base32": 4, "comma": 4, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 4, "output": [4, 9], "event": 4, "simplest": [4, 8], "tunnel": [4, 8, 10], "interchang": 4, "degre": 4, "retain": 4, "eas": [4, 8], "simpler": 4, "4242": 4, "listen_ip": 4, "listen_port": 4, "bind": 4, "10": [4, 8, 9], "88": 4, "i2p_tunnel": 4, "127": 4, "5001": 4, "dedic": [4, 8], "natur": 4, "toler": 4, "intermitt": 4, "gracefulli": 4, "restor": 4, "reappear": 4, "hostnam": 4, "expos": [4, 6], "soundmodem": 4, "kiss_fram": 4, "tnc": [4, 6, 9, 10], "8001": 4, "caution": 4, "frame": 4, "conjunct": 4, "never": [4, 6, 8], "disabl": [4, 8, 9], "intern": [4, 6, 8], "recoveri": 4, "greatli": 4, "unreli": 4, "implic": 4, "better": 4, "udpinterfac": 4, "forward_ip": 4, "255": 4, "forward_port": 4, "assum": [4, 8], "55": 4, "72": 4, "24": 4, "equival": 4, "forward": [4, 6, 8, 10], "segment": [4, 5, 6, 8, 10], "cours": [4, 8], "15": 4, "16": [4, 8, 9], "ttyusb0": [4, 9], "867": 4, "mhz": [4, 8], "867200000": 4, "125": 4, "khz": 4, "125000": 4, "tx": 4, "7": [4, 9], "mw": 4, "txpower": 4, "spread": 4, "factor": [4, 6], "12": 4, "being": [4, 6, 8], "fastest": [4, 8], "longest": 4, "spreadingfactor": 4, "throough": 4, "codingr": 4, "interv": [4, 6], "id_callsign": 4, "mycal": 4, "id_interv": 4, "600": 4, "homebrew": 4, "amount": [4, 5, 6, 8, 10], "ram": 4, "flow": [4, 5], "flow_control": 4, "pair": [4, 8], "laser": 4, "serialinterfac": 4, "baud": 4, "speed": [4, 8, 9], "115200": [4, 9], "databit": [4, 9], "pariti": [4, 9], "stopbit": [4, 9], "stdin": [4, 9], "virtual": [4, 5, 8, 9, 10], "netcat": 4, "l": [4, 9], "5757": 4, "respawn": 4, "respawn_delai": 4, "continu": [4, 7, 10], "scan": 4, "eof": 4, "respawn_interv": 4, "varieti": [4, 8, 9, 10], "openmodem": [4, 10], "period": [4, 6, 8], "beacon": 4, "station": 4, "kissinterfac": [4, 9], "ttyusb1": 4, "preambl": [4, 9], "150": [4, 9], "tail": 4, "txtail": [4, 9], "cdma": 4, "reason": [4, 8], "200": [4, 9], "slottim": [4, 9], "20": [4, 8, 9], "elaps": 4, "comment": [4, 9], "buffer": 4, "amateur": [4, 10], "spectrum": [4, 8], "encapsul": [4, 10], "callsign": 4, "ssid": 4, "realli": [4, 6], "doesn": 4, "anyth": [4, 8, 9, 10], "incur": 4, "ax25kissinterfac": 4, "no1cll": 4, "ttyusb2": 4, "150m": 4, "increas": [4, 9], "squelch": 4, "rx": 4, "turnaround": 4, "kept": [4, 5, 6, 8], "wast": 4, "airtim": 4, "behaviour": [4, 9], "bring": 4, "brought": [4, 9], "valu": [4, 6, 8], "access_point": 4, "shorthand": [4, 9], "ap": 4, "shorter": 4, "expiri": 4, "mostli": [4, 5, 8], "quiet": [4, 9], "momentarili": 4, "disappear": [4, 9], "network_nam": 4, "passphras": [4, 8], "alon": 4, "ifac_s": 4, "customis": 4, "carri": [4, 6, 8, 9], "512": [4, 6, 8], "bit": [4, 6, 8, 9, 10], "announce_cap": [4, 6], "maximum": [4, 6, 8], "alloc": [4, 6, 8, 9], "given": [4, 5, 6, 8, 9], "upkeep": 4, "cap": 4, "queue": [4, 8], "nearbi": 4, "ensur": [4, 6, 8], "overwhelm": [4, 6], "rapidli": 4, "spam": 4, "opposit": 4, "effect": 4, "excess": 4, "benefici": [4, 9], "balanc": 4, "necesarri": 4, "bitrat": 4, "report": [4, 7], "guess": 4, "per": [4, 6, 8, 10], "affect": 4, "strictli": [4, 8], "complex": [4, 8], "left": [4, 6, 8, 9], "gw": 4, "addition": [4, 8], "behalf": 4, "resid": 4, "requestor": 4, "resolv": 4, "chain": 4, "along": [4, 5, 6, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 6, 8], "vehicl": 4, "equip": [4, 5, 8], "side": [4, 10], "expir": 4, "significantli": 4, "impact": [4, 8], "announce_rate_target": 4, "announce_rate_grac": 4, "announce_rate_penalti": 4, "basi": [4, 6, 8, 9, 10], "moder": 4, "violat": 4, "enforc": 4, "penalti": 4, "7200": 4, "annouce_cap": 4, "mention": [4, 8], "strategi": [4, 6], "decis": [4, 8], "slower": [4, 6, 8], "hop": [4, 5, 6, 8, 9, 10], "right": [4, 5], "tend": 4, "conserv": 4, "span": [4, 8], "seamlessli": 4, "knowledg": [5, 8], "tradit": [5, 8], "worri": 5, "coordin": [5, 6, 8, 10], "entir": [5, 6, 8, 9], "evolv": 5, "futur": [5, 8], "mind": [5, 10], "autonom": [5, 8], "terminologi": [5, 8], "rest": [5, 10], "billion": [5, 8], "larger": [5, 8], "higher": [5, 10], "issu": [5, 7], "discrimin": 5, "ephemer": [5, 6, 8, 10], "ellipt": [5, 6, 8, 10], "curv": [5, 6, 8, 10], "diffi": [5, 8, 10], "hellman": [5, 8, 10], "exchang": [5, 6, 8, 10], "curve25519": [5, 6, 8, 10], "throttl": 5, "thu": [5, 6, 8], "agnost": [5, 8], "equal": [5, 8], "keystor": 5, "degrad": 5, "term": [5, 8], "stationari": [5, 9], "candid": 5, "optim": 5, "intend": [5, 8], "trustless": [5, 8, 10], "leav": [5, 8], "free": [5, 7, 10], "unorganis": 5, "manner": 5, "properti": [5, 6], "far": [5, 8], "unexplor": 5, "dissolv": 5, "organ": 5, "restrict": 5, "legaci": 5, "unifi": 5, "underli": [5, 10], "carrier": [5, 10], "involv": 5, "hardlin": 5, "decid": [5, 6, 8], "illustr": [5, 8], "plan": [5, 8], "member": 5, "mainli": 5, "three": [5, 8], "hill": 5, "top": [5, 8], "chosen": [5, 8], "due": 5, "sight": 5, "becaus": [5, 8], "four": 5, "At": [5, 8], "raspberri": [5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "place": [5, 8, 9], "core": [5, 8, 10], "those": [5, 8], "previous": [5, 6, 8], "d": [5, 9], "island": 5, "investig": 5, "dori": 5, "willing": 5, "she": 5, "her": 5, "home": 5, "newli": [5, 6, 8], "everyon": [5, 8], "vice": [5, 10], "versa": [5, 10], "vhf": [5, 8, 10], "outli": 5, "geograph": 5, "coverag": 5, "dai": 5, "find": [5, 8], "were": 5, "poorli": 5, "outlier": 5, "configdir": 6, "logdest": 6, "exactli": [6, 8], "independ": [6, 8, 10], "inter": 6, "soon": 6, "kill": [6, 8], "forcibli": [6, 9], "advantag": 6, "demand": 6, "mtu": [6, 8, 10], "500": [6, 8, 10], "adher": 6, "507": 6, "break": [6, 8, 10], "prerequisit": 6, "percentag": 6, "schedul": 6, "queu": [6, 9], "fewer": 6, "distant": 6, "smaller": 6, "eventu": 6, "drop": [6, 8, 9], "appli": [6, 8], "individu": [6, 8], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "signatur": [6, 8, 10], "verif": [6, 8], "sign": [6, 8], "dh": 6, "keysiz": 6, "x25519": [6, 8, 10], "concaten": 6, "256": [6, 8], "128": [6, 8, 10], "constant": 6, "truncat": [6, 8], "recall_app_data": 6, "heard": [6, 8], "full_hash": 6, "sha": [6, 8], "truncated_hash": 6, "from_byt": 6, "prv_byte": 6, "save": [6, 8], "hazard": 6, "feed": 6, "from_fil": 6, "to_fil": 6, "Be": [6, 9], "otherwis": 6, "get_private_kei": 6, "get_public_kei": 6, "load_private_kei": 6, "load_public_kei": 6, "pub_byt": 6, "ciphertext": 6, "token": [6, 8], "keyerror": 6, "hold": [6, 8], "ciphertext_token": 6, "presenc": 6, "ingo": 6, "zero": [6, 10], "full_nam": [6, 9], "app_and_aspects_from_nam": 6, "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "flag": [6, 8], "accepts_link": 6, "accept": [6, 7, 8, 9], "set_proof_requested_callback": 6, "proof_strategi": 6, "prove_non": 6, "prove_app": 6, "proof_requested_callback": 6, "allow_non": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 6, "allow_list": 6, "deregister_request_handl": 6, "deregist": 6, "symmetr": [6, 8], "typeerror": 6, "incompat": [6, 8], "set_default_app_data": 6, "callabl": 6, "clear_default_app_data": 6, "ae": [6, 8, 10], "deriv": [6, 8, 10], "secreci": [6, 8, 10], "payload": [6, 8], "instanti": 6, "encrypted_mdu": 6, "383": 6, "plain_mdu": 6, "464": 6, "resend": 6, "get_statu": 6, "cull": 6, "successful": 6, "proven": [6, 8], "established_callback": 6, "closed_callback": 6, "establishment_timeout_per_hop": 6, "keepalive_timeout_factor": 6, "4": [6, 8, 9], "calcul": [6, 8], "stale_grac": 6, "grace": 6, "keepal": [6, 8], "360": 6, "aliv": [6, 8], "stale_tim": 6, "720": 6, "mark": [6, 8], "stale": 6, "final": [6, 8], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "no_inbound_for": 6, "no_outbound_for": 6, "outbound": [6, 8], "inactive_for": 6, "purg": 6, "set_resource_callback": 6, "get_transfer_s": 6, "get_data_s": 6, "get_part": 6, "is_compress": 6, "begun": 6, "resource_strategi": 6, "accept_non": 6, "accept_app": 6, "resource_callback": 6, "unsupport": 6, "get_request_id": 6, "get_respons": 6, "get_response_tim": 6, "auto_compress": 6, "arbitrari": [6, 8, 10], "checksum": [6, 10], "Will": 6, "whenev": [6, 8], "cancel": 6, "total": [6, 8, 10], "get_seg": 6, "divid": 6, "get_hash": 6, "pathfinder_m": 6, "object": 6, "attribut": 6, "deregister_announce_handl": 6, "hops_to": 6, "next_hop": 6, "next_hop_interfac": 6, "on_interfac": 6, "tag": 6, "recurs": 6, "gratefulli": 7, "monero": 7, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 7, "ethereum": 7, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 7, "bitcoin": 7, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 7, "ko": 7, "fi": 7, "roadmap": 7, "realiti": 7, "quickli": [7, 8, 10], "sponsor": [7, 10], "dysfunct": 7, "analyt": 7, "telemetri": 7, "collect": 7, "under": [7, 9], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8], "suggest": 7, "briefli": 8, "overal": 8, "principl": [8, 10], "author": 8, "That": 8, "said": 8, "document": 8, "pretti": 8, "sentiment": 8, "philosophi": 8, "problem": 8, "seek": 8, "solv": 8, "solut": 8, "primari": 8, "lack": 8, "my": 8, "belief": 8, "highli": 8, "peopl": 8, "machin": 8, "censorship": 8, "barrier": 8, "todai": 8, "centralis": 8, "trust": 8, "approv": 8, "gatekeep": 8, "inevit": 8, "lead": 8, "govern": 8, "alter": 8, "censor": 8, "persecut": 8, "unwant": 8, "actor": 8, "imposs": 8, "freeli": 8, "deploi": 8, "enhanc": 8, "agenc": 8, "freedom": 8, "permissionless": 8, "pick": 8, "ghz": 8, "off": [8, 10], "shelf": [8, 10], "ultim": 8, "vast": 8, "myriad": 8, "thousand": 8, "surveil": 8, "disassoci": 8, "oversight": 8, "beings": 8, "usabl": 8, "useabl": 8, "critic": [8, 9], "agnostic": 8, "shall": 8, "handheld": 8, "stream": 8, "modifi": [8, 9], "interest": 8, "strong": 8, "oneself": 8, "unlicens": 8, "licens": 8, "condit": 8, "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "idea": [8, 9], "singular": 8, "_represented_": 8, "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": 8, "obvious": 8, "ridicul": 8, "multi": [8, 9, 10], "special": [8, 9], "uniqu": [8, 10], "ecdh": [8, 10], "creator": 8, "correspond": 8, "possess": 8, "although": [8, 10], "abstract": 8, "capabl": 8, "dot": [8, 9], "notat": [8, 9], "repres": 8, "plenti": 8, "environment": 8, "monitor": 8, "measur": 8, "environmentlogg": 8, "remotesensor": 8, "temperatur": 8, "4faf1b2e0a077e6a9d92fa051f256038": 8, "advis": 8, "expand": 8, "structur": 8, "recap": 8, "indirectli": 8, "awar": 8, "ledger": 8, "therefor": [8, 10], "definit": 8, "messeng": 8, "nicknam": 8, "ed25519": [8, 10], "reconstruct": 8, "notic": [8, 9], "piec": 8, "intention": 8, "infer": 8, "throughout": 8, "accord": 8, "around": 8, "assign": [8, 9], "topic": 8, "necessarili": 8, "person": 8, "entiti": 8, "robot": 8, "sensor": 8, "someth": 8, "agent": 8, "manipul": 8, "multilater": 8, "creation": 8, "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 8, "introduc": 8, "lot": 8, "surviv": 8, "overcom": 8, "challeng": 8, "asymmetr": [8, 10], "closer": 8, "distinguish": 8, "contend": 8, "enable_transport": [8, 9], "retransmit": 8, "randomis": 8, "prioriti": 8, "invers": 8, "proport": 8, "count": 8, "insert": 8, "closest": 8, "greater": 8, "retri": 8, "newer": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "neither": 8, "session": 8, "bidirect": 8, "travers": 8, "rememb": 8, "subsequ": 8, "ten": 8, "advanc": 8, "confirm": [8, 10], "insid": 8, "intermediari": 8, "moment": [8, 10], "methodologi": [8, 9], "answer": [8, 9], "malici": 8, "pretend": 8, "recreat": 8, "rotat": 8, "procedur": 8, "memori": 8, "thereaft": 8, "297": [8, 10], "practic": [8, 10], "neglig": 8, "1200": 8, "96": 8, "keypair": 8, "simplic": 8, "explan": [8, 9], "lki": 8, "laid": 8, "had": 8, "construct": 8, "lkr": 8, "chose": 8, "bi": 8, "unequivoc": 8, "retransmiss": 8, "reassembl": 8, "programmat": 8, "satisfi": 8, "half": [8, 10], "duplex": [8, 10], "averag": 8, "throughput": [8, 10], "x": [8, 9], "runtim": 8, "consist": 8, "whereupon": 8, "stabl": [8, 10], "maintain": 8, "year": 8, "microcontrol": 8, "430": 8, "868": 8, "900": 8, "debian": [8, 9], "recent": 8, "mac": 8, "tailor": 8, "treat": 8, "regard": 8, "preshar": 8, "ifac": [8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": 8, "context": 8, "465": 8, "vari": [8, 9], "64": [8, 9], "00": [8, 9], "01": 8, "reserv": 8, "11": 8, "_______": 8, "________________": 8, "________": 8, "______": 8, "__": 8, "_": 8, "01010000": 8, "00000100": 8, "hash1": 8, "hash2": 8, "header_2": 8, "00000000": 8, "00000111": 8, "header_1": 8, "10000000": 8, "exclud": 8, "51": 8, "157": 8, "83": [8, 9], "115": 8, "99": 8, "conceptu": 8, "x22519": 8, "hkdf": 8, "fernet": [8, 10], "cbc": [8, 10], "hmac": [8, 10], "hashlib": 8, "pkcs7": [8, 10], "pad": [8, 10], "trivial": [8, 10], "consequ": 8, "backend": 8, "loss": 8, "scrutini": 8, "review": [8, 10], "risk": 8, "pose": 8, "driver": [9, 10], "privileg": 9, "light": 9, "weight": 9, "boot": 9, "verbos": 9, "exampleconfig": 9, "ie": 9, "remov": 9, "breviti": 9, "socket": 9, "turn": 9, "share_inst": 9, "shared_instance_port": 9, "37428": 9, "instance_control_port": 9, "37429": 9, "panic": 9, "unrecover": 9, "occur": [9, 10], "panic_on_interface_error": 9, "warn": 9, "6": 9, "debug": 9, "unus": 9, "order": 9, "teach": 9, "task": 9, "v": 9, "show": 9, "ifconfig": 9, "gbp": 9, "13": 9, "kb": 9, "86": 9, "mbp": 9, "63": 9, "23": 9, "80": 9, "17": 9, "tcpinterfac": 9, "unsign": 9, "187": 9, "27": 9, "74": 9, "uhf": [9, 10], "30": 9, "kbp": 9, "e702c42ba8": 9, "49": 9, "9": 9, "5245a8efe1788c6a1cd36144a270e13b": 9, "c89b4da064bf66d280f0e4d8abfd9806": 9, "f53a1c4278e0726bb73fcc623d6ce763": 9, "reticulu": 9, "w": 9, "posit": 9, "probe": 9, "2d03725b327348980d570f739a3a5708": 9, "38": 9, "469": 9, "1726dbad538775b5bf9b0ea25a4079c8": 9, "c50cc4e4f7838b6c31f60ab9032cbc62": 9, "copi": 9, "tgz": 9, "73cbd378bb0286ed11a707c13447bb1": 9, "allowed_hash": 9, "decreas": 9, "auth": 9, "941bed5e228775e5a8079fc38b1ccf3f": 9, "1b03013c25f1c2ca068a4f080b844a10": 9, "7a55144adf826958a9529a3bcf08b149": 9, "cat": 9, "proc": 9, "cpuinfo": 9, "pseudo": 9, "shell": 9, "stderr": 9, "noauth": 9, "noid": 9, "mirror": 9, "max": 9, "perman": 9, "administr": 9, "ubuntu": 9, "ftdi_ft230x_basic_uart_43891ckm": 9, "if00": 9, "port0": 9, "plug": 9, "unplug": 9, "systemd": 9, "usr": 9, "bin": 9, "etc": 9, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "unforg": 10, "acknowledg": 10, "resili": 10, "userland": 10, "beta": 10, "bug": 10, "warrant": 10, "sha256": 10, "iv": 10, "urandom": 10, "intuit": 10, "friendli": 10, "44": 10, "gigabyt": 10, "scalabl": 10, "hoc": 10, "optic": 10, "transform": 10, "stop": 10, "fact": 10, "strength": 10, "generalis": 10, "fibr": 10, "popular": 10, "ideal": 10, "stdio": 10, "hack": 10, "foremost": 10, "audit": 10, "privaci": 10, "thorough": 10, "research": 10, "direction": 8}, "objects": {"RNS": [[6, 0, 1, "", "Destination"], [6, 0, 1, "", "Identity"], [6, 0, 1, "", "Link"], [6, 0, 1, "", "Packet"], [6, 0, 1, "", "PacketReceipt"], [6, 0, 1, "", "RequestReceipt"], [6, 0, 1, "", "Resource"], [6, 0, 1, "", "Reticulum"], [6, 0, 1, "", "Transport"]], "RNS.Destination": [[6, 1, 1, "", "accepts_links"], [6, 1, 1, "", "announce"], [6, 1, 1, "", "app_and_aspects_from_name"], [6, 1, 1, "", "clear_default_app_data"], [6, 1, 1, "", "create_keys"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "deregister_request_handler"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "full_name"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "hash"], [6, 1, 1, "", "hash_from_name_and_identity"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "register_request_handler"], [6, 1, 1, "", "set_default_app_data"], [6, 1, 1, "", "set_link_established_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_proof_requested_callback"], [6, 1, 1, "", "set_proof_strategy"], [6, 1, 1, "", "sign"]], "RNS.Identity": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "KEYSIZE"], [6, 2, 1, "", "TRUNCATED_HASHLENGTH"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "from_bytes"], [6, 1, 1, "", "from_file"], [6, 1, 1, "", "full_hash"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "get_public_key"], [6, 1, 1, "", "get_random_hash"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "load_public_key"], [6, 1, 1, "", "recall"], [6, 1, 1, "", "recall_app_data"], [6, 1, 1, "", "sign"], [6, 1, 1, "", "to_file"], [6, 1, 1, "", "truncated_hash"], [6, 1, 1, "", "validate"]], "RNS.Link": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [6, 2, 1, "", "KEEPALIVE"], [6, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [6, 2, 1, "", "STALE_GRACE"], [6, 2, 1, "", "STALE_TIME"], [6, 1, 1, "", "get_remote_identity"], [6, 1, 1, "", "identify"], [6, 1, 1, "", "inactive_for"], [6, 1, 1, "", "no_inbound_for"], [6, 1, 1, "", "no_outbound_for"], [6, 1, 1, "", "request"], [6, 1, 1, "", "set_link_closed_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_remote_identified_callback"], [6, 1, 1, "", "set_resource_callback"], [6, 1, 1, "", "set_resource_concluded_callback"], [6, 1, 1, "", "set_resource_started_callback"], [6, 1, 1, "", "set_resource_strategy"], [6, 1, 1, "", "teardown"]], "RNS.Packet": [[6, 2, 1, "", "ENCRYPTED_MDU"], [6, 2, 1, "", "PLAIN_MDU"], [6, 1, 1, "", "resend"], [6, 1, 1, "", "send"]], "RNS.PacketReceipt": [[6, 1, 1, "", "get_rtt"], [6, 1, 1, "", "get_status"], [6, 1, 1, "", "set_delivery_callback"], [6, 1, 1, "", "set_timeout"], [6, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_request_id"], [6, 1, 1, "", "get_response"], [6, 1, 1, "", "get_response_time"], [6, 1, 1, "", "get_status"]], "RNS.Resource": [[6, 1, 1, "", "advertise"], [6, 1, 1, "", "cancel"], [6, 1, 1, "", "get_data_size"], [6, 1, 1, "", "get_hash"], [6, 1, 1, "", "get_parts"], [6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_segments"], [6, 1, 1, "", "get_transfer_size"], [6, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[6, 2, 1, "", "ANNOUNCE_CAP"], [6, 2, 1, "", "MTU"], [6, 1, 1, "", "should_use_implicit_proof"], [6, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[6, 2, 1, "", "PATHFINDER_M"], [6, 1, 1, "", "deregister_announce_handler"], [6, 1, 1, "", "has_path"], [6, 1, 1, "", "hops_to"], [6, 1, 1, "", "next_hop"], [6, 1, 1, "", "next_hop_interface"], [6, 1, 1, "", "register_announce_handler"], [6, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 7, 8], "exampl": [0, 5], "minim": 0, "announc": [0, 4, 8], "broadcast": 0, "echo": 0, "link": [0, 8], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 7, 8, 9, 10], "base": [1, 2], "program": [1, 9], "nomad": 1, "network": [1, 3, 5], "sideband": 1, "includ": [1, 9], "util": [1, 9], "creat": [1, 2], "With": 1, "connect": 1, "instanc": 1, "over": [1, 5], "internet": [1, 5], "public": [1, 8], "testnet": 1, "ad": 1, "radio": 1, "interfac": [1, 4, 8, 10], "develop": 1, "particip": 1, "arm64": 1, "android": 1, "pure": 1, "python": 1, "commun": 2, "hardwar": 2, "rnode": [2, 4], "support": [2, 4, 7], "board": 2, "lilygo": 2, "lora32": 2, "v2": 2, "1": 2, "0": 2, "t": 2, "beam": 2, "heltec": 2, "unsign": 2, "x": 2, "v1": 2, "instal": 2, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "indic": 3, "tabl": 3, "auto": 4, "i2p": 4, "tcp": 4, "server": 4, "client": 4, "udp": 4, "lora": [4, 5], "serial": [4, 9], "pipe": 4, "kiss": 4, "ax": 4, "25": 4, "common": 4, "option": 4, "mode": 4, "rate": 4, "control": 4, "build": 5, "concept": 5, "overview": 5, "scenario": 5, "interconnect": 5, "site": 5, "bridg": 5, "growth": 5, "converg": 5, "api": 6, "refer": [6, 8], "class": 6, "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "destin": 8, "name": [8, 9], "kei": 8, "ident": 8, "further": 8, "transport": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "resourc": 8, "setup": 8, "protocol": 8, "specif": 8, "packet": 8, "prioritis": 8, "access": 8, "wire": 8, "format": 8, "propag": 8, "rule": 8, "cryptograph": 8, "primit": 8, "your": 9, "system": 9, "configur": 9, "data": 9, "rnsd": 9, "rnstatu": 9, "rnpath": 9, "rnprobe": 9, "rncp": 9, "rnx": 9, "improv": 9, "fix": 9, "port": 9, "servic": 9, "what": 10, "i": 10, "current": 10, "statu": 10, "doe": 10, "offer": 10, "where": 10, "can": 10, "devic": 10, "caveat": 10, "emptor": 10}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Try Using a Reticulum-based Program": [[1, "try-using-a-reticulum-based-program"]], "Nomad Network": [[1, "nomad-network"]], "Sideband": [[1, "sideband"]], "Using the Included Utilities": [[1, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[1, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[1, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[1, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[1, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[1, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[1, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[1, "reticulum-on-arm64"]], "Reticulum on Android": [[1, "reticulum-on-android"]], "Pure-Python Reticulum": [[1, "pure-python-reticulum"]], "Communications Hardware": [[2, "communications-hardware"]], "RNode": [[2, "rnode"]], "Creating RNodes": [[2, "creating-rnodes"]], "Supported Boards": [[2, "supported-boards"]], "LilyGO LoRa32 v2.1": [[2, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[2, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[2, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[2, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[2, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[2, "unsigned-rnode-v1-x"]], "Installation": [[2, "installation"]], "Usage with Reticulum": [[2, "usage-with-reticulum"]], "Suppliers": [[2, "suppliers"]], "WiFi-based Hardware": [[2, "wifi-based-hardware"]], "Combining Hardware Types": [[2, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[3, "reticulum-network-stack-manual"]], "Indices and Tables": [[3, "indices-and-tables"]], "Supported Interfaces": [[4, "supported-interfaces"]], "Auto Interface": [[4, "auto-interface"]], "I2P Interface": [[4, "i2p-interface"]], "TCP Server Interface": [[4, "tcp-server-interface"]], "TCP Client Interface": [[4, "tcp-client-interface"]], "UDP Interface": [[4, "udp-interface"]], "RNode LoRa Interface": [[4, "rnode-lora-interface"]], "Serial Interface": [[4, "serial-interface"]], "Pipe Interface": [[4, "pipe-interface"]], "KISS Interface": [[4, "kiss-interface"]], "AX.25 KISS Interface": [[4, "ax-25-kiss-interface"]], "Common Interface Options": [[4, "common-interface-options"]], "Interface Modes": [[4, "interface-modes"]], "Announce Rate Control": [[4, "announce-rate-control"]], "Building Networks": [[5, "building-networks"]], "Concepts & Overview": [[5, "concepts-overview"]], "Example Scenarios": [[5, "example-scenarios"]], "Interconnected LoRa Sites": [[5, "interconnected-lora-sites"]], "Bridging Over the Internet": [[5, "bridging-over-the-internet"]], "Growth and Convergence": [[5, "growth-and-convergence"]], "API Reference": [[6, "api-reference"]], "Classes": [[6, "classes"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "Using Reticulum on Your System": [[9, "using-reticulum-on-your-system"]], "Configuration & Data": [[9, "configuration-data"]], "Included Utility Programs": [[9, "included-utility-programs"]], "The rnsd Utility": [[9, "the-rnsd-utility"]], "The rnstatus Utility": [[9, "the-rnstatus-utility"]], "The rnpath Utility": [[9, "the-rnpath-utility"]], "The rnprobe Utility": [[9, "the-rnprobe-utility"]], "The rncp Utility": [[9, "the-rncp-utility"]], "The rnx Utility": [[9, "the-rnx-utility"]], "Improving System Configuration": [[9, "improving-system-configuration"]], "Fixed Serial Port Names": [[9, "fixed-serial-port-names"]], "Reticulum as a System Service": [[9, "reticulum-as-a-system-service"]], "What is Reticulum?": [[10, "what-is-reticulum"]], "Current Status": [[10, "current-status"]], "What does Reticulum Offer?": [[10, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[10, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[10, "interface-types-and-devices"]], "Caveat Emptor": [[10, "caveat-emptor"]], "Understanding Reticulum": [[8, "understanding-reticulum"]], "Motivation": [[8, "motivation"]], "Goals": [[8, "goals"]], "Introduction & Basic Functionality": [[8, "introduction-basic-functionality"]], "Destinations": [[8, "destinations"]], "Destination Naming": [[8, "destination-naming"]], "Public Key Announcements": [[8, "public-key-announcements"]], "Identities": [[8, "understanding-identities"]], "Getting Further": [[8, "getting-further"]], "Reticulum Transport": [[8, "reticulum-transport"]], "Node Types": [[8, "node-types"]], "The Announce Mechanism in Detail": [[8, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[8, "reaching-the-destination"]], "Link Establishment in Detail": [[8, "link-establishment-in-detail"]], "Resources": [[8, "resources"]], "Reference Setup": [[8, "reference-setup"]], "Protocol Specifics": [[8, "protocol-specifics"]], "Packet Prioritisation": [[8, "packet-prioritisation"]], "Interface Access Codes": [[8, "interface-access-codes"]], "Wire Format": [[8, "wire-format"]], "Announce Propagation Rules": [[8, "announce-propagation-rules"]], "Cryptographic Primitives": [[8, "cryptographic-primitives"]]}, "indexentries": {}})
\ No newline at end of file
+Search.setIndex({"docnames": ["examples", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 1, 4, 5, 6, 8, 9, 10], "number": [0, 1, 4, 5, 6, 8, 9], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "includ": [0, 2, 3, 4, 6, 8], "sourc": [0, 1, 2, 5, 8, 10], "distribut": [0, 1, 5, 6, 8, 9], "reticulum": [0, 4, 5, 6], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "us": [0, 2, 3, 4, 5, 6, 8], "learn": [0, 1, 7, 8], "how": [0, 1, 2, 4, 5, 8, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9], "program": [0, 3, 4, 6, 8, 10], "The": [0, 1, 2, 3, 4, 5, 6, 10], "demonstr": [0, 4], "bare": 0, "minimum": [0, 4, 5, 8], "setup": [0, 1, 3, 4], "requir": [0, 1, 4, 5, 8, 9, 10], "connect": [0, 2, 3, 4, 5, 6, 8, 9, 10], "network": [0, 2, 4, 6, 8, 9, 10], "from": [0, 1, 2, 4, 5, 6, 8, 9, 10], "In": [0, 1, 2, 4, 5, 6, 8, 9, 10], "about": [0, 1, 2, 4, 5, 6, 8], "five": 0, "line": [0, 1, 2, 4, 5, 8, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 6, 8, 9, 10], "initialis": [0, 6, 9], "readi": [0, 1, 2, 4, 5, 6, 10], "pass": [0, 2, 4, 5, 6, 8, 9], "traffic": [0, 1, 4, 5, 6, 8, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "rn": [0, 1, 6, 8, 9], "start": [0, 2, 3, 4, 6, 8, 9], "up": [0, 1, 2, 4, 5, 8, 9, 10], "gener": [0, 1, 2, 4, 5, 6, 8, 9, 10], "new": [0, 4, 5, 6, 8, 9], "destin": [0, 1, 3, 4, 5, 6, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9], "send": [0, 4, 6, 8, 9], "an": [0, 1, 2, 4, 5, 6, 8, 9, 10], "import": [0, 1, 2, 4, 5, 7, 8], "argpars": 0, "": [0, 1, 4, 5, 8, 9, 10], "defin": [0, 4, 8, 9], "app": [0, 1, 6, 8], "name": [0, 3, 4, 5, 6], "we": [0, 1, 2, 4, 7, 8], "ll": [0, 1, 10], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "sinc": [0, 1, 4, 5, 6, 8], "basic": [0, 1, 3, 6, 9], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "part": [0, 4, 5, 6, 8], "rang": [0, 1, 2, 4, 5, 8, 9, 10], "util": [0, 2, 3, 4, 8], "put": [0, 2, 4], "them": [0, 1, 2, 4, 5, 7, 8, 9], "within": [0, 1, 4, 5, 6, 8], "namespac": 0, "example_util": [0, 9], "app_nam": [0, 6], "execut": [0, 1, 4, 6, 9], "when": [0, 1, 2, 4, 5, 6, 8, 9], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 1, 4, 5, 6, 8], "first": [0, 1, 4, 6, 8, 9], "randomli": [0, 8], "ident": [0, 1, 3, 6, 9, 10], "our": [0, 8], "just": [0, 1, 2, 4, 5, 8, 10], "endpoint": [0, 5, 6, 8], "address": [0, 1, 4, 5, 6, 8, 10], "commun": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "also": [0, 1, 2, 4, 5, 6, 8, 9, 10], "exist": [0, 1, 2, 4, 8, 9, 10], "which": [0, 1, 4, 5, 6, 8, 9], "know": [0, 1, 2, 5, 6, 8], "thei": [0, 1, 4, 5, 6, 8, 9], "reachabl": [0, 1, 4, 5, 6, 8, 9], "autoomat": 0, "path": [0, 1, 2, 4, 6, 8, 9], "anywher": [0, 4], "els": [0, 5, 8], "IN": [0, 6], "singl": [0, 4, 6, 8, 9, 10], "minimalsampl": 0, "configur": [0, 1, 2, 3, 4, 5, 6, 8, 10], "automat": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prove": [0, 8], "packet": [0, 1, 2, 3, 4, 5, 6, 9, 10], "adress": [0, 6, 8], "By": [0, 1, 4, 6, 8, 9], "do": [0, 1, 2, 4, 6, 8, 10], "proof": [0, 6, 8, 9], "each": [0, 1, 4, 5, 8, 9], "incom": [0, 4, 6, 9], "transmit": [0, 4, 8], "back": [0, 4, 8, 10], "sender": [0, 1, 5, 8, 9], "anyon": [0, 1, 2, 5, 6, 8, 9], "tri": 0, "whether": [0, 4, 6, 8], "wa": [0, 2, 4, 5, 6, 8, 10], "receiv": [0, 1, 4, 6, 8, 9], "correctli": 0, "set_proof_strategi": [0, 6], "prove_al": [0, 6], "everyth": [0, 5, 8], "hand": [0, 1], "over": [0, 2, 3, 4, 6, 8, 9, 10], "control": [0, 1, 2, 3, 5, 6, 8], "loop": 0, "announceloop": 0, "log": [0, 4, 9], "prettyhexrep": 0, "hash": [0, 1, 6, 8, 9], "run": [0, 1, 2, 4, 5, 6, 8, 9, 10], "hit": 0, "enter": [0, 9], "manual": [0, 1, 4, 5, 6, 9], "ctrl": 0, "c": [0, 5], "quit": 0, "until": [0, 4, 6], "exit": [0, 1, 6, 9], "If": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server": [0, 1, 2, 3, 9], "client": [0, 1, 2, 3, 6], "messag": [0, 1, 6, 8, 9], "direct": [0, 1, 2, 5, 6, 8, 9], "toward": [0, 4, 8], "while": [0, 1, 2, 4, 5, 6, 8, 10], "true": [0, 4, 6, 9], "input": [0, 9], "sent": [0, 1, 6, 8, 9], "startup": 0, "get": [0, 2, 3, 4, 6, 10], "pars": 0, "desir": [0, 2, 4, 8], "mode": [0, 1, 2, 3, 8, 9, 10], "__name__": 0, "__main__": 0, "try": [0, 3, 4], "parser": 0, "argumentpars": 0, "descript": [0, 9], "add_argu": 0, "config": [0, 1, 2, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 4, 6, 8, 9], "help": [0, 2, 5, 7, 8, 9, 10], "altern": [0, 4, 9], "directori": [0, 9], "type": [0, 1, 3, 4, 5, 6, 9], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 4], "keyboardinterrupt": 0, "print": [0, 4, 9], "found": [0, 1, 4, 5, 8, 9], "http": [0, 1, 7], "github": [0, 1, 7], "com": [0, 1, 7], "markqvist": [0, 1, 7], "blob": [0, 8], "master": [0, 6], "py": [0, 1, 8], "build": [0, 1, 2, 3, 4, 8, 10], "upon": [0, 8], "previou": 0, "explor": [0, 8, 10], "notif": [0, 6], "relev": [0, 2, 4, 6, 8, 9], "set": [0, 1, 2, 4, 5, 6, 8, 9, 10], "callback": [0, 6], "applic": [0, 4, 5, 6, 8, 9], "arriv": [0, 8], "random": [0, 6, 8], "two": [0, 1, 2, 4, 5, 8], "list": [0, 1, 2, 4, 6, 8, 10], "string": [0, 6], "app_data": [0, 6], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 1], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 1, 2, 5, 8, 10], "destination_1": 0, "destination_2": 0, "handler": [0, 6], "onli": [0, 1, 2, 4, 5, 6, 8, 9, 10], "ask": [0, 2, 6], "chang": [0, 1, 4, 6, 8, 9, 10], "filter": [0, 5, 8], "see": [0, 1, 4, 5, 6, 8, 9, 10], "what": [0, 1, 3, 6, 8], "happen": [0, 6, 8], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 6], "regist": [0, 6], "transport": [0, 1, 3, 4, 5, 6, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 4, 6, 8, 9, 10], "len": 0, "1": [0, 4, 6, 8, 9], "data": [0, 1, 3, 4, 5, 6, 8, 10], "encod": 0, "utf": 0, "8": [0, 4, 9], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "class": [0, 5, 6, 10], "method": [0, 1, 4, 6, 8], "take": [0, 1, 4, 8, 9, 10], "option": [0, 1, 2, 3, 5, 6, 8, 9], "argument": [0, 6, 9], "instanc": [0, 3, 4, 6, 8, 9], "some": [0, 1, 2, 4, 5, 8, 9], "want": [0, 1, 2, 4, 5, 8, 9, 10], "aspect": [0, 2, 4, 6, 8], "__init__": 0, "self": [0, 5, 10], "call": [0, 5, 6, 8, 10], "system": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10], "match": [0, 4, 8], "specif": [0, 2, 3, 4, 6, 10], "cannot": [0, 1], "wildcard": 0, "received_announc": [0, 6], "destination_hash": [0, 6, 9], "announced_ident": [0, 6], "contain": [0, 5, 6, 8, 9], "follow": [0, 1, 2, 4, 7, 8, 9, 10], "decod": 0, "plaintext": [0, 6], "unencrypt": [0, 6, 8], "inform": [0, 1, 3, 4, 5, 6, 8, 9], "ani": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "listen": [0, 4, 8, 9], "sy": 0, "channel": [0, 4, 5, 7, 8, 10], "did": 0, "one": [0, 1, 2, 4, 5, 6, 8, 9, 10], "public_inform": 0, "ad": [0, 2, 3, 4, 5, 6, 8, 10], "so": [0, 1, 2, 4, 5, 6, 7, 8, 10], "differ": [0, 1, 2, 4, 5, 6, 8, 9, 10], "plain": [0, 4, 6, 8], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 1, 2, 4, 5, 6, 9], "everi": [0, 4, 5, 6, 8], "time": [0, 1, 2, 4, 5, 6, 8, 9], "set_packet_callback": [0, 6], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 1, 2, 4, 5, 8, 9], "out": [0, 1, 2, 4, 5, 6, 8, 9, 10], "r": [0, 4, 8, 9], "n": [0, 8, 9], "end": [0, 4, 5, 6, 8, 10], "stdout": [0, 4, 9], "flush": 0, "text": [0, 1, 5, 8], "prompt": 0, "channelarg": 0, "between": [0, 4, 5, 6, 8], "interfac": [0, 2, 3, 5, 6, 9], "simpl": [0, 2, 6, 8, 9, 10], "respond": [0, 6], "receipt": [0, 6, 8], "choos": [0, 1, 4, 8], "global": [0, 1, 4, 5, 8, 10], "server_ident": 0, "queri": [0, 1, 6], "abl": [0, 1, 4, 5, 6, 8, 9], "verifi": [0, 6, 8], "repli": [0, 9], "encrypt": [0, 1, 5, 6, 8, 10], "wai": [0, 1, 4, 5, 8], "certain": [0, 4, 5, 7, 8], "than": [0, 1, 4, 5, 8], "read": [0, 1, 4, 6, 8, 9], "echo_destin": 0, "tell": [0, 4], "function": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], "server_callback": 0, "wait": [0, 4, 8, 9], "go": [0, 1, 4, 8], "handl": [0, 2, 4, 5, 6, 8, 9, 10], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 4], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 6, 9], "binari": [0, 1, 8], "represent": 0, "command": [0, 1, 4, 9], "dest_len": 0, "truncated_hashlength": [0, 6], "2": [0, 4, 6, 8, 9], "rais": [0, 6], "valueerror": [0, 6], "length": [0, 4, 6, 8], "invalid": [0, 6], "hex": 0, "hexadecim": [0, 8, 9], "charact": 0, "byte": [0, 6, 8, 9, 10], "format": [0, 3, 10], "fromhex": 0, "e": [0, 5], "check": [0, 1, 6, 8], "overrid": 0, "loglevel": [0, 6, 9], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 10], "feedback": [0, 3], "log_info": 0, "doe": [0, 1, 2, 3, 4, 5, 6, 8, 9], "load": [0, 1, 6, 9], "has_path": [0, 6], "To": [0, 1, 2, 4, 5, 8, 9, 10], "public": [0, 3, 4, 6], "kei": [0, 3, 5, 6, 10], "done": [0, 1, 4, 5, 8, 9], "recal": [0, 6], "modul": [0, 1, 2, 8, 9, 10], "known": [0, 6, 8, 9], "return": [0, 6, 9], "outgo": [0, 4, 6, 8, 9], "got": 0, "correct": [0, 8], "convent": 0, "request_destin": 0, "add": [0, 1, 4, 5, 9], "echo_request": 0, "get_random_hash": [0, 6], "successfulli": [0, 8], "packetreceipt": [0, 3, 6], "packet_receipt": [0, 6], "set_timeout": [0, 6], "set_timeout_callback": [0, 6], "packet_timed_out": 0, "deliveri": [0, 1, 6, 10], "set_delivery_callback": [0, 6], "packet_deliv": 0, "yet": [0, 4, 8], "request_path": [0, 6], "statu": [0, 1, 3, 4, 6, 8, 9], "deliv": [0, 6], "rtt": [0, 6, 8], "get_rtt": [0, 6], "round": [0, 6, 9], "3": [0, 4, 8, 9, 10], "rttstring": 0, "second": [0, 4, 6, 8, 9, 10], "1000": 0, "millisecond": [0, 9], "proof_packet": 0, "valid": [0, 4, 6, 8, 9], "trip": [0, 6, 9], "fail": [0, 6], "store_tru": 0, "t": [0, 1, 4, 5, 6, 9], "metavar": 0, "float": [0, 6], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 1, 4, 5, 6, 10], "remot": [0, 6, 9], "forth": 0, "o": [0, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 6], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 6], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 1, 4, 6, 8], "last": [0, 4, 6], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 9], "begin": [0, 2, 6], "And": 0, "client_packet_receiv": 0, "close": [0, 5, 6, 9], "link_establish": 0, "link_clos": 0, "interact": [0, 1, 6, 8, 9], "client_loop": 0, "becom": [0, 1, 5, 8], "should_quit": 0, "fals": [0, 4, 6, 9], "should": [0, 1, 2, 4, 5, 6, 8, 9, 10], "q": [0, 9], "teardown": [0, 6], "mdu": 0, "size": [0, 1, 4, 6, 8, 9], "exce": [0, 4, 6], "log_error": 0, "error": [0, 1, 7, 9], "ha": [0, 1, 2, 4, 5, 6, 8, 10], "been": [0, 1, 2, 4, 5, 6, 8, 10], "later": [0, 1, 4], "teardown_reason": 0, "now": [0, 1, 5, 8, 9], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 4, 6, 9], "_exit": 0, "identifi": [0, 4, 6, 8, 9], "intiat": 0, "onc": [0, 1, 2, 4, 5, 6, 8, 9, 10], "initi": [0, 5, 6, 8, 10], "peer": [0, 1, 4, 6, 8, 9], "identifyexampl": 0, "set_remote_identified_callback": [0, 6], "remote_identifi": 0, "origin": [0, 5, 8], "displai": [0, 8], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 6], "client_ident": 0, "sendig": 0, "perform": [0, 1, 4, 5, 8], "random_text_gener": 0, "request_id": [0, 6], "remote_ident": [0, 6], "requested_at": [0, 6], "look": [0, 1, 4, 8, 9], "On": [0, 1, 4, 9], "full": [0, 4, 6, 8, 9, 10], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 8, 9], "awai": [0, 4, 5, 8, 9], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 6], "response_gener": [0, 6], "allow": [0, 1, 2, 4, 5, 6, 8, 9, 10], "allow_al": [0, 6], "response_callback": [0, 6], "got_respons": 0, "failed_callback": [0, 6], "request_fail": 0, "request_receipt": [0, 6], "request_receiv": 0, "implement": [0, 4, 5, 6, 7, 8, 10], "file": [0, 1, 2, 4, 5, 6, 8, 9, 10], "download": [0, 4, 9], "resourc": [0, 1, 3, 6, 7], "effici": [0, 1, 4, 8, 10], "serv": [0, 2, 4, 5, 8, 9], "pleas": [0, 1, 4, 6, 9, 10], "note": [0, 1, 2, 4, 6, 8, 9], "larg": [0, 2, 4, 5, 6, 8, 10], "transfer": [0, 6, 8, 9, 10], "recommend": [0, 1, 2, 8], "compress": [0, 6, 8], "hashmap": 0, "sequenc": [0, 6, 8, 10], "long": [0, 1, 2, 4, 8], "slow": [0, 4, 8], "cpu": [0, 8], "probabl": [0, 5, 8, 9, 10], "result": [0, 8, 9], "befor": [0, 1, 4, 6, 8, 9], "complet": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prepar": [0, 5], "bundl": 0, "instead": [0, 1, 4, 8, 9], "slice": 0, "chunk": 0, "suitabl": [0, 1, 4, 5, 8, 10], "pack": 0, "thread": 0, "vendor": [0, 2], "umsgpack": 0, "app_timeout": 0, "45": [0, 8], "serve_path": 0, "here": [0, 1, 2, 4, 8, 9], "conveni": 0, "list_fil": 0, "entri": [0, 1, 8], "actual": [0, 1, 4, 8], "listdir": 0, "isfil": 0, "join": [0, 1, 5, 7, 8], "host": [0, 1, 4, 8, 9], "still": [0, 1, 2, 5, 8], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 5], "mani": [0, 1, 2, 4, 5, 6, 8, 9, 10], "split": 0, "filelist": 0, "multipl": [0, 4, 5, 8, 9], "hint": 0, "alreadi": [0, 1, 2, 5, 6, 8, 9], "support": [0, 1, 3, 5, 8, 10], "after": [0, 4, 5, 6, 8, 9], "re": [0, 4, 6, 8], "keep": [0, 5, 6, 8, 9, 10], "open": [0, 2, 4, 5, 6, 7, 8, 9, 10], "client_request": 0, "longer": [0, 5, 8, 9], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 4], "don": [0, 1, 2, 5, 6, 9], "unknown": [0, 4, 6, 8], "conclud": [0, 6], "hasattr": 0, "avail": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server_fil": 0, "current": [0, 1, 2, 3, 4, 6, 8], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 4, 7], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 4, 6, 8, 9], "normal": [0, 4, 6], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 6], "set_resource_strategi": [0, 6], "accept_al": [0, 6], "set_resource_started_callback": [0, 6], "download_began": 0, "set_resource_concluded_callback": [0, 6], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 2, 4, 6], "request_packet": 0, "create_receipt": [0, 6], "print_menu": 0, "25": [0, 3, 10], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 1, 4, 5, 8], "state": 0, "It": [0, 1, 2, 4, 6, 8, 9, 10], "uninterest": 0, "won": 0, "detail": [0, 1, 3, 4, 6, 9, 10], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 6], "100": [0, 4, 8], "rprogress": 0, "save_error": 0, "could": [0, 1, 4, 5, 6, 8, 10], "disk": [0, 6], "hour": [0, 4], "rem": 0, "divmod": 0, "3600": [0, 4], "minut": [0, 1, 4, 8], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 8], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 3, 9], "suffix": 0, "b": [0, 5, 9], "ttransfer": 0, "press": 0, "index": [0, 1, 3], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 1, 6], "local": [0, 1, 4, 5, 6, 8, 9, 10], "unpackb": 0, "append": [0, 8], "visibl": 0, "updat": [0, 1, 6, 8], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9], "target": [0, 4, 9], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 6, 10], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 6, 7, 8], "readabl": [0, 6, 8], "num": 0, "unit": [0, 1, 9], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 8], "pi": [0, 5, 8, 9, 10], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 1, 8, 9], "g": 0, "p": [0, 9], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 6, 8], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "other": [1, 2, 4, 5, 6, 8, 9], "even": [1, 2, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 10], "These": [1, 4, 8, 9], "feel": 1, "work": [1, 2, 4, 5, 8, 9, 10], "design": [1, 2, 5, 8, 10], "well": [1, 2, 4, 5, 6, 8, 10], "lora": [1, 2, 3, 8, 10], "wifi": [1, 3, 4, 5, 8, 9, 10], "wire": [1, 2, 3, 4, 10], "ethernet": [1, 2, 4, 5, 8, 10], "combin": [1, 3, 5, 8], "As": [1, 2, 4, 5, 6, 8, 10], "easi": [1, 2, 4, 8, 9, 10], "experi": [1, 8], "without": [1, 2, 5, 8, 10], "transceiv": [1, 2, 4, 8, 10], "infrastructur": [1, 2, 4, 5, 8, 9], "launch": [1, 9], "separ": [1, 4, 5, 8, 9], "devic": [1, 2, 3, 4, 5, 6, 8, 9], "same": [1, 2, 4, 5, 6, 8, 9], "enough": [1, 2, 8], "physic": [1, 2, 4, 8, 9], "termin": [1, 6], "suit": [1, 2, 8, 9], "featur": [1, 7, 8, 10], "both": [1, 2, 4, 5, 6, 8, 9, 10], "delai": [1, 4, 8, 9], "offlin": 1, "share": [1, 5, 6, 8, 9], "browser": 1, "page": [1, 3, 8], "dynam": [1, 9], "render": 1, "authent": [1, 4, 5, 6, 8, 9, 10], "more": [1, 2, 4, 5, 6, 8, 9, 10], "face": [1, 4], "protocol": [1, 2, 3, 4, 10], "lxmf": 1, "anoth": [1, 6, 8, 9], "project": 1, "instal": [1, 3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 2, 9], "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "similar": [1, 2, 4, 5, 9, 10], "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "earli": [1, 2], "stage": [1, 8], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 9], "manag": [1, 5, 6, 8, 9], "rnsd": [1, 3], "background": [1, 4], "foreground": 1, "servic": [1, 3, 5], "rnstatu": [1, 3, 4, 8], "rnpath": [1, 3, 4], "rnprobe": [1, 3], "view": [1, 4, 8, 9], "chapter": [1, 2, 4, 5, 6, 8, 9, 10], "locat": [1, 2, 5, 8, 9], "edit": [1, 9], "rnsconfig": 1, "broadcast": [1, 3, 4, 6, 8], "domain": [1, 4], "further": [1, 3, 4], "exampl": [1, 2, 3, 4, 6, 8, 9, 10], "tcp": [1, 2, 3, 5, 8, 10], "There": [1, 5, 8, 10], "subnet": [1, 5], "rout": [1, 4, 5, 6, 8, 9, 10], "tabl": [1, 4, 5, 8, 9], "thing": 1, "discov": [1, 4], "topographi": [1, 5, 8], "situat": [1, 2, 4, 5, 8], "where": [1, 2, 3, 4, 5, 6, 8, 9], "utilis": [1, 5, 6, 9, 10], "extern": [1, 4, 6, 10], "often": [1, 4, 5, 8, 9], "suffici": [1, 4, 8, 9], "act": [1, 6, 8, 9], "gatewai": [1, 4, 5, 8], "enabl": [1, 2, 4, 5, 6, 8, 9], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "i2p": [1, 3, 10], "carefulli": 1, "tcpserverinterfac": [1, 4], "access": [1, 3, 4, 5, 6, 9], "ip": [1, 2, 4, 8, 9, 10], "faster": [1, 4, 8], "lower": [1, 4, 9], "latenc": [1, 8, 10], "energi": 1, "i2pinterfac": [1, 4], "howev": [1, 5, 8], "leak": 1, "reveal": [1, 6, 8, 10], "who": [1, 8], "inspect": [1, 4, 5, 8], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "like": [1, 2, 4, 5, 6, 8, 9, 10], "transmiss": [1, 4, 6, 8], "though": [1, 2, 4, 8], "publicli": 1, "most": [1, 2, 4, 5, 8, 9], "anymor": 1, "through": [1, 2, 4, 5, 6, 8, 9, 10], "invis": [1, 4], "daemon": [1, 4, 6, 9], "parallel": 1, "For": [1, 2, 4, 5, 6, 8, 10], "alwai": [1, 4, 6, 8, 9], "node": [1, 3, 4, 5, 9, 10], "i2pd": [1, 4], "mix": [1, 4, 5, 9], "hide": 1, "relai": 1, "extra": [1, 4, 5, 9], "comput": [1, 8, 10], "power": [1, 2, 4, 8], "attack": 1, "form": [1, 4, 5, 6, 8], "deep": 1, "much": [1, 4, 5, 8, 9], "difficult": [1, 2], "non": [1, 6, 8], "behind": [1, 8], "firewal": [1, 4], "nat": 1, "preserv": [1, 6], "anonym": [1, 5, 6, 8, 10], "care": [1, 2, 6, 10], "slightli": 1, "experiment": [1, 2, 10], "made": [1, 6, 8], "dublin": 1, "hub": [1, 4], "tcpclientinterfac": [1, 2, 4], "ye": [1, 4, 8, 9], "target_host": [1, 4], "target_port": [1, 4], "4965": [1, 9], "frankfurt": [1, 9], "5377": 1, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 1, "b32": [1, 4], "point": [1, 2, 4, 5, 8, 9], "absolut": [1, 2, 7, 10], "usag": [1, 3, 4, 6, 7, 9], "occasion": 1, "test": [1, 2, 8], "failur": [1, 4], "guarante": [1, 8], "compat": [1, 2, 4, 6, 8], "hardwar": [1, 3, 4, 5, 6, 8, 9, 10], "wide": [1, 2, 4, 8, 10], "section": [1, 2, 4, 5, 8, 9], "easili": [1, 4, 5, 8, 9, 10], "cheapli": 1, "rnode": [1, 3, 8, 9, 10], "purpos": [1, 2, 4, 6, 8], "digit": [1, 2, 8, 10], "integr": [1, 5, 8], "yourself": [1, 8, 10], "custom": [1, 4, 6, 8, 10], "firmwar": [1, 2, 8], "board": [1, 3, 8, 10], "auto": [1, 2, 3, 6, 8], "script": [1, 2], "prefer": [1, 8], "purchas": [1, 5, 8, 10], "supplier": [1, 3], "addit": [1, 2, 4, 8, 9, 10], "privat": [1, 4, 6, 7, 8, 10], "secur": [1, 8, 10], "uncensor": 1, "mesh": [1, 4, 5, 10], "think": 1, "welcom": 1, "head": 1, "discuss": [1, 2, 8], "propos": 1, "easiest": [1, 2, 4, 8], "releas": [1, 2, 4, 8], "abov": [1, 2, 4, 8, 9], "next": [1, 5, 6, 8], "step": [1, 2], "pyseri": 1, "netifac": 1, "api": [1, 3, 8, 10], "associ": [1, 6, 8], "case": [1, 2, 4, 5, 8, 9], "recip": 1, "cryptographi": [1, 8, 10], "clone": 1, "repositori": [1, 7, 8], "git": 1, "move": [1, 4, 8], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "python3": [1, 2], "echo": [1, 3, 9], "unless": [1, 4, 6, 8], "ve": 1, "immedi": [1, 4, 9], "necessari": [1, 2, 4, 5, 6, 8], "nano": 1, "repeat": 1, "process": [1, 2, 4, 6, 8], "h": [1, 9], "ping": [1, 9], "replac": [1, 8, 9], "below": [1, 2, 4, 9], "3e12fc71692f8ec47bc5": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 6, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "packag": [1, 4, 8], "sudo": [1, 9], "apt": 1, "relat": 1, "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "io": [1, 2, 9], "pre": [1, 2, 6, 8], "wheel": 1, "standard": [1, 2, 8], "sure": [1, 2, 9], "pkg": 1, "upgrad": [1, 8], "Then": 1, "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "platform": [1, 2, 8], "compil": 1, "export": 1, "cargo_build_target": 1, "aarch64": 1, "sever": [1, 5, 6, 9], "succe": 1, "softwar": [1, 2, 4, 8, 10], "possibl": [1, 2, 4, 5, 6, 8, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "rare": [1, 4], "obscur": 1, "unusu": 1, "rnspure": 1, "content": [1, 5, 9], "No": [1, 4, 8, 9, 10], "matter": [1, 4], "perfectli": 1, "serial": [1, 2, 3, 8, 10], "pyca": [1, 8], "cryptograph": [1, 3, 5, 10], "primit": [1, 3], "One": [2, 6], "truli": [2, 8], "valuabl": [2, 7], "almost": [2, 4, 8, 9], "conceiv": 2, "kind": [2, 4, 5, 8], "medium": [2, 4, 5, 6, 8, 10], "flexibl": [2, 4, 10], "cover": [2, 8, 10], "wireless": [2, 5], "decad": 2, "old": [2, 7, 8], "radio": [2, 3, 4, 5, 6, 8, 9, 10], "modem": [2, 4, 5, 6, 8, 10], "modern": [2, 8], "millimet": 2, "wave": 2, "backhaul": [2, 5], "oper": [2, 4, 5, 6, 8, 9, 10], "good": [2, 5, 8, 9], "chanc": 2, "box": 2, "glue": 2, "littl": [2, 8], "effort": 2, "pipeinterfac": [2, 4], "kiss": [2, 3, 9, 10], "simplyequip": 2, "broad": 2, "abund": 2, "sometim": 2, "especi": [2, 4], "scratch": 2, "real": [2, 5, 10], "world": [2, 5, 10], "minim": [2, 3, 8], "cost": [2, 8, 10], "fundament": [2, 8], "categori": 2, "emploi": [2, 8], "reliabl": [2, 4, 5, 8, 10], "commonli": 2, "either": [2, 4, 5, 8, 9], "expens": 2, "hard": 2, "hungri": 2, "attempt": [2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8], "band": [2, 8], "scheme": 2, "limit": [2, 5, 8], "common": [2, 3, 5, 8, 9, 10], "ism": [2, 8], "avoid": [2, 8, 9], "confus": [2, 8], "layer": [2, 4, 5, 8, 10], "noth": [2, 10], "lorawan": [2, 8], "central": [2, 5, 8], "iot": 2, "raw": 2, "overhead": [2, 4, 8], "high": [2, 4, 8, 10], "level": [2, 4, 8, 9], "directli": [2, 4, 6, 8, 9, 10], "replic": [2, 8], "across": [2, 5], "togeth": [2, 8, 9], "tool": [2, 8, 9, 10], "exact": [2, 4, 8], "explain": [2, 6], "approach": [2, 8, 9], "develop": [2, 3, 6, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": 2, "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": 2, "autoinstal": 2, "seri": 2, "question": [2, 4], "consid": [2, 6, 8, 10], "newest": [2, 8], "version": [2, 8, 9], "stabil": 2, "paramet": [2, 4, 5, 6, 8], "port": [2, 3, 4, 5, 8, 10], "air": [2, 10], "id": [2, 4, 6, 8, 9], "itself": [2, 3, 8], "touch": [2, 10], "produc": 2, "short": [2, 8, 9], "fulli": [2, 8, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [2, 3, 4, 5, 6, 9, 10], "dhcp": [2, 4, 9], "dn": 2, "least": [2, 4, 8, 9, 10], "transpar": [2, 4, 8, 9], "capac": [2, 4, 6, 8], "distanc": [2, 8], "ubiqu": 2, "airmax": 2, "ltu": 2, "mikrotik": 2, "exhaust": [2, 8], "rel": [2, 8, 10], "cheap": [2, 8], "co": [2, 4, 10], "concurr": [2, 8, 9], "pattern": [2, 8], "gain": [2, 6, 8], "antenna": 2, "backbon": 2, "area": [2, 4, 5, 8, 10], "aim": [3, 8], "particip": [3, 5, 8], "caveat": 3, "emptor": 3, "fast": [3, 4, 6, 8], "base": [3, 4, 5, 6, 8, 9, 10], "nomad": 3, "sideband": 3, "With": [3, 4, 5, 8, 9], "internet": [3, 4, 8, 10], "testnet": [3, 9], "arm64": 3, "android": 3, "pure": [3, 8], "python": [3, 8, 9, 10], "rncp": 3, "rnx": 3, "improv": [3, 4, 7], "fix": [3, 8], "motiv": 3, "goal": [3, 4], "introduct": 3, "announc": [3, 6, 9], "mechan": [3, 4], "reach": [3, 4, 5], "prioritis": [3, 4, 5, 6], "propag": [3, 4, 6], "rule": [3, 4], "udp": [3, 5, 8, 9, 10], "pipe": [3, 10], "ax": [3, 10], "concept": [3, 8, 9], "overview": [3, 4, 8], "interconnect": [3, 4, 8], "site": [3, 4], "growth": 3, "converg": [3, 8], "identif": [3, 4, 10], "request": [3, 4, 6, 8, 9], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "requestreceipt": [3, 6], "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": 4, "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8], "os": 4, "interface_en": [4, 9], "isol": [4, 9], "lan": 4, "group": [4, 6, 8], "group_id": 4, "kernel": [4, 9, 10], "wlan0": 4, "eth1": 4, "Or": [4, 9, 10], "ignor": [4, 6, 8], "ones": [4, 9], "ignored_devic": 4, "tun0": 4, "eth0": 4, "multicast": 4, "autodiscov": 4, "discoveri": [4, 8, 9], "scope": 4, "admin": 4, "organis": [4, 5, 7], "custom_network_nam": 4, "discovery_scop": 4, "discovery_port": 4, "48555": 4, "data_port": 4, "49555": 4, "frequent": 4, "block": 4, "inbound": [4, 6], "portabl": [4, 8], "persist": [4, 9], "achiev": [4, 6, 8], "geti2p": 4, "net": 4, "websit": 4, "base32": 4, "comma": 4, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 4, "output": [4, 9], "event": 4, "simplest": [4, 8], "tunnel": [4, 8, 10], "interchang": 4, "degre": 4, "retain": 4, "eas": [4, 8], "simpler": 4, "4242": 4, "listen_ip": 4, "listen_port": 4, "bind": 4, "10": [4, 8, 9], "88": 4, "i2p_tunnel": 4, "127": 4, "5001": 4, "dedic": [4, 8], "natur": 4, "toler": 4, "intermitt": 4, "gracefulli": 4, "restor": 4, "reappear": 4, "hostnam": 4, "expos": [4, 6], "soundmodem": 4, "kiss_fram": 4, "tnc": [4, 6, 9, 10], "8001": 4, "caution": 4, "frame": 4, "conjunct": 4, "never": [4, 6, 8], "disabl": [4, 8, 9], "intern": [4, 6, 8], "recoveri": 4, "greatli": 4, "unreli": 4, "implic": 4, "better": 4, "udpinterfac": 4, "forward_ip": 4, "255": 4, "forward_port": 4, "assum": [4, 8], "55": 4, "72": 4, "24": 4, "equival": 4, "forward": [4, 6, 8, 10], "segment": [4, 5, 6, 8, 10], "cours": [4, 8], "15": 4, "16": [4, 8, 9], "ttyusb0": [4, 9], "867": 4, "mhz": [4, 8], "867200000": 4, "125": 4, "khz": 4, "125000": 4, "tx": 4, "7": [4, 9], "mw": 4, "txpower": 4, "spread": 4, "factor": [4, 6], "12": 4, "being": [4, 6, 8], "fastest": [4, 8], "longest": 4, "spreadingfactor": 4, "throough": 4, "codingr": 4, "interv": [4, 6], "id_callsign": 4, "mycal": 4, "id_interv": 4, "600": 4, "homebrew": 4, "amount": [4, 5, 6, 8, 10], "ram": 4, "flow": [4, 5], "flow_control": 4, "pair": [4, 8], "laser": 4, "serialinterfac": 4, "baud": 4, "speed": [4, 8, 9], "115200": [4, 9], "databit": [4, 9], "pariti": [4, 9], "stopbit": [4, 9], "stdin": [4, 9], "virtual": [4, 5, 8, 9, 10], "netcat": 4, "l": [4, 9], "5757": 4, "respawn": 4, "respawn_delai": 4, "continu": [4, 7, 10], "scan": 4, "eof": 4, "respawn_interv": 4, "varieti": [4, 8, 9, 10], "openmodem": [4, 10], "period": [4, 6, 8], "beacon": 4, "station": 4, "kissinterfac": [4, 9], "ttyusb1": 4, "preambl": [4, 9], "150": [4, 9], "tail": 4, "txtail": [4, 9], "cdma": 4, "reason": [4, 8], "200": [4, 9], "slottim": [4, 9], "20": [4, 8, 9], "elaps": 4, "comment": [4, 9], "buffer": 4, "amateur": [4, 10], "spectrum": [4, 8], "encapsul": [4, 10], "callsign": 4, "ssid": 4, "realli": [4, 6], "doesn": 4, "anyth": [4, 8, 9, 10], "incur": 4, "ax25kissinterfac": 4, "no1cll": 4, "ttyusb2": 4, "150m": 4, "increas": [4, 9], "squelch": 4, "rx": 4, "turnaround": 4, "kept": [4, 5, 6, 8], "wast": 4, "airtim": 4, "behaviour": [4, 9], "bring": 4, "brought": [4, 9], "valu": [4, 6, 8], "access_point": 4, "shorthand": [4, 9], "ap": 4, "shorter": 4, "expiri": 4, "mostli": [4, 5, 8], "quiet": [4, 9], "momentarili": 4, "disappear": [4, 9], "network_nam": 4, "passphras": [4, 8], "alon": 4, "ifac_s": 4, "customis": 4, "carri": [4, 6, 8, 9], "512": [4, 6, 8], "bit": [4, 6, 8, 9, 10], "announce_cap": [4, 6], "maximum": [4, 6, 8], "alloc": [4, 6, 8, 9], "given": [4, 5, 6, 8, 9], "upkeep": 4, "cap": 4, "queue": [4, 8], "nearbi": 4, "ensur": [4, 6, 8], "overwhelm": [4, 6], "rapidli": 4, "spam": 4, "opposit": 4, "effect": 4, "excess": 4, "benefici": [4, 9], "balanc": 4, "necesarri": 4, "bitrat": 4, "report": [4, 7], "guess": 4, "per": [4, 6, 8, 10], "affect": 4, "strictli": [4, 8], "complex": [4, 8], "left": [4, 6, 8, 9], "gw": 4, "addition": [4, 8], "behalf": 4, "resid": 4, "requestor": 4, "resolv": 4, "chain": 4, "along": [4, 5, 6, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 6, 8], "vehicl": 4, "equip": [4, 5, 8], "side": [4, 10], "expir": 4, "significantli": 4, "impact": [4, 8], "announce_rate_target": 4, "announce_rate_grac": 4, "announce_rate_penalti": 4, "basi": [4, 6, 8, 9, 10], "moder": 4, "violat": 4, "enforc": 4, "penalti": 4, "7200": 4, "annouce_cap": 4, "mention": [4, 8], "strategi": [4, 6], "decis": [4, 8], "slower": [4, 6, 8], "hop": [4, 5, 6, 8, 9, 10], "right": [4, 5], "tend": 4, "conserv": 4, "span": [4, 8], "seamlessli": 4, "knowledg": [5, 8], "tradit": [5, 8], "worri": 5, "coordin": [5, 6, 8, 10], "entir": [5, 6, 8, 9], "evolv": 5, "futur": [5, 8], "mind": [5, 10], "autonom": [5, 8], "terminologi": [5, 8], "rest": [5, 10], "billion": [5, 8], "larger": [5, 8], "higher": [5, 10], "issu": [5, 7], "discrimin": 5, "ephemer": [5, 6, 8, 10], "ellipt": [5, 6, 8, 10], "curv": [5, 6, 8, 10], "diffi": [5, 8, 10], "hellman": [5, 8, 10], "exchang": [5, 6, 8, 10], "curve25519": [5, 6, 8, 10], "throttl": 5, "thu": [5, 6, 8], "agnost": [5, 8], "equal": [5, 8], "keystor": 5, "degrad": 5, "term": [5, 8], "stationari": [5, 9], "candid": 5, "optim": 5, "intend": [5, 8], "trustless": [5, 8, 10], "leav": [5, 8], "free": [5, 7, 10], "unorganis": 5, "manner": 5, "properti": [5, 6], "far": [5, 8], "unexplor": 5, "dissolv": 5, "organ": 5, "restrict": 5, "legaci": 5, "unifi": 5, "underli": [5, 10], "carrier": [5, 10], "involv": 5, "hardlin": 5, "decid": [5, 6, 8], "illustr": [5, 8], "plan": [5, 8], "member": 5, "mainli": 5, "three": [5, 8], "hill": 5, "top": [5, 8], "chosen": [5, 8], "due": 5, "sight": 5, "becaus": [5, 8], "four": 5, "At": [5, 8], "raspberri": [5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "place": [5, 8, 9], "core": [5, 8, 10], "those": [5, 8], "previous": [5, 6, 8], "d": [5, 9], "island": 5, "investig": 5, "dori": 5, "willing": 5, "she": 5, "her": 5, "home": 5, "newli": [5, 6, 8], "everyon": [5, 8], "vice": [5, 10], "versa": [5, 10], "vhf": [5, 8, 10], "outli": 5, "geograph": 5, "coverag": 5, "dai": 5, "find": [5, 8], "were": 5, "poorli": 5, "outlier": 5, "signatur": [6, 8, 10], "configdir": 6, "logdest": 6, "exactli": [6, 8], "independ": [6, 8, 10], "inter": 6, "soon": 6, "kill": [6, 8], "forcibli": [6, 9], "advantag": 6, "demand": 6, "mtu": [6, 8, 10], "500": [6, 8, 10], "adher": 6, "507": 6, "break": [6, 8, 10], "prerequisit": 6, "percentag": 6, "schedul": 6, "queu": [6, 9], "fewer": 6, "distant": 6, "smaller": 6, "eventu": 6, "drop": [6, 8, 9], "appli": [6, 8], "individu": [6, 8], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "verif": [6, 8], "sign": [6, 8], "dh": 6, "keysiz": 6, "x25519": [6, 8, 10], "concaten": 6, "256": [6, 8], "128": [6, 8, 10], "constant": 6, "truncat": [6, 8], "recall_app_data": 6, "heard": [6, 8], "full_hash": 6, "sha": [6, 8], "truncated_hash": 6, "from_byt": 6, "prv_byte": 6, "save": [6, 8], "hazard": 6, "feed": 6, "from_fil": 6, "to_fil": 6, "Be": [6, 9], "otherwis": 6, "get_private_kei": 6, "get_public_kei": 6, "load_private_kei": 6, "load_public_kei": 6, "pub_byt": 6, "ciphertext": 6, "token": [6, 8], "keyerror": 6, "hold": [6, 8], "ciphertext_token": 6, "presenc": 6, "ingo": 6, "zero": [6, 10], "full_nam": [6, 9], "app_and_aspects_from_nam": 6, "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "flag": [6, 8], "accepts_link": 6, "accept": [6, 7, 8, 9], "set_proof_requested_callback": 6, "proof_strategi": 6, "prove_non": 6, "prove_app": 6, "proof_requested_callback": 6, "allow_non": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 6, "allow_list": 6, "deregister_request_handl": 6, "deregist": 6, "symmetr": [6, 8], "typeerror": 6, "incompat": [6, 8], "set_default_app_data": 6, "callabl": 6, "clear_default_app_data": 6, "ae": [6, 8, 10], "deriv": [6, 8, 10], "secreci": [6, 8, 10], "payload": [6, 8], "instanti": 6, "encrypted_mdu": 6, "383": 6, "plain_mdu": 6, "464": 6, "resend": 6, "get_statu": 6, "cull": 6, "successful": 6, "proven": [6, 8], "established_callback": 6, "closed_callback": 6, "establishment_timeout_per_hop": 6, "keepalive_timeout_factor": 6, "4": [6, 8, 9], "calcul": [6, 8], "stale_grac": 6, "grace": 6, "keepal": [6, 8], "360": 6, "aliv": [6, 8], "stale_tim": 6, "720": 6, "mark": [6, 8], "stale": 6, "final": [6, 8], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "no_inbound_for": 6, "no_outbound_for": 6, "outbound": [6, 8], "inactive_for": 6, "purg": 6, "set_resource_callback": 6, "get_transfer_s": 6, "get_data_s": 6, "get_part": 6, "is_compress": 6, "begun": 6, "resource_strategi": 6, "accept_non": 6, "accept_app": 6, "resource_callback": 6, "unsupport": 6, "get_request_id": 6, "get_respons": 6, "get_response_tim": 6, "auto_compress": 6, "arbitrari": [6, 8, 10], "checksum": [6, 10], "Will": 6, "whenev": [6, 8], "cancel": 6, "total": [6, 8, 10], "get_seg": 6, "divid": 6, "get_hash": 6, "pathfinder_m": 6, "object": 6, "attribut": 6, "deregister_announce_handl": 6, "hops_to": 6, "next_hop": 6, "next_hop_interfac": 6, "on_interfac": 6, "tag": 6, "recurs": 6, "gratefulli": 7, "monero": 7, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 7, "ethereum": 7, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 7, "bitcoin": 7, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 7, "ko": 7, "fi": 7, "roadmap": 7, "realiti": 7, "quickli": [7, 8, 10], "sponsor": [7, 10], "dysfunct": 7, "analyt": 7, "telemetri": 7, "collect": 7, "under": [7, 9], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8], "suggest": 7, "briefli": 8, "overal": 8, "principl": [8, 10], "author": 8, "That": 8, "said": 8, "document": 8, "pretti": 8, "sentiment": 8, "philosophi": 8, "problem": 8, "seek": 8, "solv": 8, "solut": 8, "primari": 8, "lack": 8, "my": 8, "belief": 8, "highli": 8, "peopl": 8, "machin": 8, "censorship": 8, "barrier": 8, "todai": 8, "centralis": 8, "trust": 8, "approv": 8, "gatekeep": 8, "inevit": 8, "lead": 8, "govern": 8, "alter": 8, "censor": 8, "persecut": 8, "unwant": 8, "actor": 8, "imposs": 8, "freeli": 8, "deploi": 8, "enhanc": 8, "agenc": 8, "freedom": 8, "permissionless": 8, "pick": 8, "ghz": 8, "off": [8, 10], "shelf": [8, 10], "ultim": 8, "vast": 8, "myriad": 8, "thousand": 8, "surveil": 8, "disassoci": 8, "oversight": 8, "beings": 8, "usabl": 8, "useabl": 8, "critic": [8, 9], "agnostic": 8, "shall": 8, "handheld": 8, "stream": 8, "modifi": [8, 9], "interest": 8, "strong": 8, "oneself": 8, "unlicens": 8, "licens": 8, "condit": 8, "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "idea": [8, 9], "singular": 8, "_represented_": 8, "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": 8, "obvious": 8, "ridicul": 8, "multi": [8, 9, 10], "special": [8, 9], "uniqu": [8, 10], "ecdh": [8, 10], "creator": 8, "correspond": 8, "possess": 8, "although": [8, 10], "abstract": 8, "capabl": 8, "dot": [8, 9], "notat": [8, 9], "repres": 8, "plenti": 8, "environment": 8, "monitor": 8, "measur": 8, "environmentlogg": 8, "remotesensor": 8, "temperatur": 8, "4faf1b2e0a077e6a9d92fa051f256038": 8, "advis": 8, "expand": 8, "structur": 8, "recap": 8, "indirectli": 8, "awar": 8, "ledger": 8, "therefor": [8, 10], "definit": 8, "messeng": 8, "nicknam": 8, "ed25519": [8, 10], "reconstruct": 8, "notic": [8, 9], "piec": 8, "intention": 8, "infer": 8, "throughout": 8, "accord": 8, "around": 8, "assign": [8, 9], "topic": 8, "necessarili": 8, "person": 8, "entiti": 8, "robot": 8, "sensor": 8, "someth": 8, "agent": 8, "manipul": 8, "multilater": 8, "creation": 8, "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 8, "introduc": 8, "lot": 8, "surviv": 8, "overcom": 8, "challeng": 8, "asymmetr": [8, 10], "closer": 8, "distinguish": 8, "contend": 8, "enable_transport": [8, 9], "retransmit": 8, "randomis": 8, "prioriti": 8, "invers": 8, "proport": 8, "count": 8, "insert": 8, "closest": 8, "greater": 8, "retri": 8, "newer": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "neither": 8, "session": 8, "bidirect": 8, "travers": 8, "rememb": 8, "subsequ": 8, "ten": 8, "advanc": 8, "confirm": [8, 10], "insid": 8, "intermediari": 8, "moment": [8, 10], "methodologi": [8, 9], "answer": [8, 9], "malici": 8, "pretend": 8, "recreat": 8, "rotat": 8, "procedur": 8, "memori": 8, "thereaft": 8, "297": [8, 10], "practic": [8, 10], "neglig": 8, "1200": 8, "96": 8, "keypair": 8, "simplic": 8, "explan": [8, 9], "lki": 8, "laid": 8, "had": 8, "construct": 8, "lkr": 8, "chose": 8, "bi": 8, "direction": 8, "unequivoc": 8, "retransmiss": 8, "reassembl": 8, "programmat": 8, "satisfi": 8, "half": [8, 10], "duplex": [8, 10], "averag": 8, "throughput": [8, 10], "x": [8, 9], "runtim": 8, "consist": 8, "whereupon": 8, "stabl": [8, 10], "maintain": 8, "year": 8, "microcontrol": 8, "430": 8, "868": 8, "900": 8, "debian": [8, 9], "recent": 8, "mac": 8, "tailor": 8, "treat": 8, "regard": 8, "preshar": 8, "ifac": [8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": 8, "context": 8, "465": 8, "vari": [8, 9], "64": [8, 9], "00": [8, 9], "01": 8, "reserv": 8, "11": 8, "_______": 8, "________________": 8, "________": 8, "______": 8, "__": 8, "_": 8, "01010000": 8, "00000100": 8, "hash1": 8, "hash2": 8, "header_2": 8, "00000000": 8, "00000111": 8, "header_1": 8, "10000000": 8, "exclud": 8, "51": 8, "157": 8, "83": [8, 9], "115": 8, "99": 8, "conceptu": 8, "x22519": 8, "hkdf": 8, "fernet": [8, 10], "cbc": [8, 10], "hmac": [8, 10], "hashlib": 8, "pkcs7": [8, 10], "pad": [8, 10], "trivial": [8, 10], "consequ": 8, "backend": 8, "loss": 8, "scrutini": 8, "review": [8, 10], "risk": 8, "pose": 8, "driver": [9, 10], "privileg": 9, "light": 9, "weight": 9, "boot": 9, "verbos": 9, "exampleconfig": 9, "ie": 9, "remov": 9, "breviti": 9, "socket": 9, "turn": 9, "share_inst": 9, "shared_instance_port": 9, "37428": 9, "instance_control_port": 9, "37429": 9, "panic": 9, "unrecover": 9, "occur": [9, 10], "panic_on_interface_error": 9, "warn": 9, "6": 9, "debug": 9, "unus": 9, "order": 9, "teach": 9, "task": 9, "v": 9, "show": 9, "ifconfig": 9, "gbp": 9, "13": 9, "kb": 9, "86": 9, "mbp": 9, "63": 9, "23": 9, "80": 9, "17": 9, "tcpinterfac": 9, "unsign": 9, "187": 9, "27": 9, "74": 9, "uhf": [9, 10], "30": 9, "kbp": 9, "e702c42ba8": 9, "49": 9, "9": 9, "5245a8efe1788c6a1cd36144a270e13b": 9, "c89b4da064bf66d280f0e4d8abfd9806": 9, "f53a1c4278e0726bb73fcc623d6ce763": 9, "reticulu": 9, "w": 9, "posit": 9, "probe": 9, "2d03725b327348980d570f739a3a5708": 9, "38": 9, "469": 9, "1726dbad538775b5bf9b0ea25a4079c8": 9, "c50cc4e4f7838b6c31f60ab9032cbc62": 9, "copi": 9, "tgz": 9, "73cbd378bb0286ed11a707c13447bb1": 9, "allowed_hash": 9, "decreas": 9, "auth": 9, "941bed5e228775e5a8079fc38b1ccf3f": 9, "1b03013c25f1c2ca068a4f080b844a10": 9, "7a55144adf826958a9529a3bcf08b149": 9, "cat": 9, "proc": 9, "cpuinfo": 9, "pseudo": 9, "shell": 9, "stderr": 9, "noauth": 9, "noid": 9, "mirror": 9, "max": 9, "perman": 9, "administr": 9, "ubuntu": 9, "ftdi_ft230x_basic_uart_43891ckm": 9, "if00": 9, "port0": 9, "plug": 9, "unplug": 9, "systemd": 9, "usr": 9, "bin": 9, "etc": 9, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "unforg": 10, "acknowledg": 10, "resili": 10, "userland": 10, "beta": 10, "bug": 10, "warrant": 10, "sha256": 10, "iv": 10, "urandom": 10, "intuit": 10, "friendli": 10, "44": 10, "gigabyt": 10, "scalabl": 10, "hoc": 10, "optic": 10, "transform": 10, "stop": 10, "fact": 10, "strength": 10, "generalis": 10, "fibr": 10, "popular": 10, "ideal": 10, "stdio": 10, "hack": 10, "foremost": 10, "audit": 10, "privaci": 10, "thorough": 10, "research": 10}, "objects": {"RNS": [[6, 0, 1, "", "Destination"], [6, 0, 1, "", "Identity"], [6, 0, 1, "", "Link"], [6, 0, 1, "", "Packet"], [6, 0, 1, "", "PacketReceipt"], [6, 0, 1, "", "RequestReceipt"], [6, 0, 1, "", "Resource"], [6, 0, 1, "", "Reticulum"], [6, 0, 1, "", "Transport"]], "RNS.Destination": [[6, 1, 1, "", "accepts_links"], [6, 1, 1, "", "announce"], [6, 1, 1, "", "app_and_aspects_from_name"], [6, 1, 1, "", "clear_default_app_data"], [6, 1, 1, "", "create_keys"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "deregister_request_handler"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "full_name"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "hash"], [6, 1, 1, "", "hash_from_name_and_identity"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "register_request_handler"], [6, 1, 1, "", "set_default_app_data"], [6, 1, 1, "", "set_link_established_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_proof_requested_callback"], [6, 1, 1, "", "set_proof_strategy"], [6, 1, 1, "", "sign"]], "RNS.Identity": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "KEYSIZE"], [6, 2, 1, "", "TRUNCATED_HASHLENGTH"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "from_bytes"], [6, 1, 1, "", "from_file"], [6, 1, 1, "", "full_hash"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "get_public_key"], [6, 1, 1, "", "get_random_hash"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "load_public_key"], [6, 1, 1, "", "recall"], [6, 1, 1, "", "recall_app_data"], [6, 1, 1, "", "sign"], [6, 1, 1, "", "to_file"], [6, 1, 1, "", "truncated_hash"], [6, 1, 1, "", "validate"]], "RNS.Link": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [6, 2, 1, "", "KEEPALIVE"], [6, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [6, 2, 1, "", "STALE_GRACE"], [6, 2, 1, "", "STALE_TIME"], [6, 1, 1, "", "get_remote_identity"], [6, 1, 1, "", "identify"], [6, 1, 1, "", "inactive_for"], [6, 1, 1, "", "no_inbound_for"], [6, 1, 1, "", "no_outbound_for"], [6, 1, 1, "", "request"], [6, 1, 1, "", "set_link_closed_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_remote_identified_callback"], [6, 1, 1, "", "set_resource_callback"], [6, 1, 1, "", "set_resource_concluded_callback"], [6, 1, 1, "", "set_resource_started_callback"], [6, 1, 1, "", "set_resource_strategy"], [6, 1, 1, "", "teardown"]], "RNS.Packet": [[6, 2, 1, "", "ENCRYPTED_MDU"], [6, 2, 1, "", "PLAIN_MDU"], [6, 1, 1, "", "resend"], [6, 1, 1, "", "send"]], "RNS.PacketReceipt": [[6, 1, 1, "", "get_rtt"], [6, 1, 1, "", "get_status"], [6, 1, 1, "", "set_delivery_callback"], [6, 1, 1, "", "set_timeout"], [6, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_request_id"], [6, 1, 1, "", "get_response"], [6, 1, 1, "", "get_response_time"], [6, 1, 1, "", "get_status"]], "RNS.Resource": [[6, 1, 1, "", "advertise"], [6, 1, 1, "", "cancel"], [6, 1, 1, "", "get_data_size"], [6, 1, 1, "", "get_hash"], [6, 1, 1, "", "get_parts"], [6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_segments"], [6, 1, 1, "", "get_transfer_size"], [6, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[6, 2, 1, "", "ANNOUNCE_CAP"], [6, 2, 1, "", "MTU"], [6, 1, 1, "", "should_use_implicit_proof"], [6, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[6, 2, 1, "", "PATHFINDER_M"], [6, 1, 1, "", "deregister_announce_handler"], [6, 1, 1, "", "has_path"], [6, 1, 1, "", "hops_to"], [6, 1, 1, "", "next_hop"], [6, 1, 1, "", "next_hop_interface"], [6, 1, 1, "", "register_announce_handler"], [6, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 7, 8], "exampl": [0, 5], "minim": 0, "announc": [0, 4, 8], "broadcast": 0, "echo": 0, "link": [0, 8], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 7, 8, 9, 10], "base": [1, 2], "program": [1, 9], "nomad": 1, "network": [1, 3, 5], "sideband": 1, "includ": [1, 9], "util": [1, 9], "creat": [1, 2], "With": 1, "connect": 1, "instanc": 1, "over": [1, 5], "internet": [1, 5], "public": [1, 8], "testnet": 1, "ad": 1, "radio": 1, "interfac": [1, 4, 8, 10], "develop": 1, "particip": 1, "arm64": 1, "android": 1, "pure": 1, "python": 1, "commun": 2, "hardwar": 2, "rnode": [2, 4], "support": [2, 4, 7], "board": 2, "lilygo": 2, "lora32": 2, "v2": 2, "1": 2, "0": 2, "t": 2, "beam": 2, "heltec": 2, "unsign": 2, "x": 2, "v1": 2, "instal": 2, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "tabl": 3, "Of": 3, "content": 3, "indic": 3, "auto": 4, "i2p": 4, "tcp": 4, "server": 4, "client": 4, "udp": 4, "lora": [4, 5], "serial": [4, 9], "pipe": 4, "kiss": 4, "ax": 4, "25": 4, "common": 4, "option": 4, "mode": 4, "rate": 4, "control": 4, "build": 5, "concept": 5, "overview": 5, "scenario": 5, "interconnect": 5, "site": 5, "bridg": 5, "growth": 5, "converg": 5, "api": 6, "refer": [6, 8], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "destin": 8, "name": [8, 9], "kei": 8, "ident": 8, "further": 8, "transport": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "resourc": 8, "setup": 8, "protocol": 8, "specif": 8, "packet": 8, "prioritis": 8, "access": 8, "wire": 8, "format": 8, "propag": 8, "rule": 8, "cryptograph": 8, "primit": 8, "your": 9, "system": 9, "configur": 9, "data": 9, "rnsd": 9, "rnstatu": 9, "rnpath": 9, "rnprobe": 9, "rncp": 9, "rnx": 9, "improv": 9, "fix": 9, "port": 9, "servic": 9, "what": 10, "i": 10, "current": 10, "statu": 10, "doe": 10, "offer": 10, "where": 10, "can": 10, "devic": 10, "caveat": 10, "emptor": 10}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Try Using a Reticulum-based Program": [[1, "try-using-a-reticulum-based-program"]], "Nomad Network": [[1, "nomad-network"]], "Sideband": [[1, "sideband"]], "Using the Included Utilities": [[1, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[1, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[1, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[1, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[1, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[1, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[1, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[1, "reticulum-on-arm64"]], "Reticulum on Android": [[1, "reticulum-on-android"]], "Pure-Python Reticulum": [[1, "pure-python-reticulum"]], "Communications Hardware": [[2, "communications-hardware"]], "RNode": [[2, "rnode"]], "Creating RNodes": [[2, "creating-rnodes"]], "Supported Boards": [[2, "supported-boards"]], "LilyGO LoRa32 v2.1": [[2, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[2, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[2, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[2, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[2, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[2, "unsigned-rnode-v1-x"]], "Installation": [[2, "installation"]], "Usage with Reticulum": [[2, "usage-with-reticulum"]], "Suppliers": [[2, "suppliers"]], "WiFi-based Hardware": [[2, "wifi-based-hardware"]], "Combining Hardware Types": [[2, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[3, "reticulum-network-stack-manual"]], "Table Of Contents": [[3, "table-of-contents"]], "Indices and Tables": [[3, "indices-and-tables"]], "Supported Interfaces": [[4, "supported-interfaces"]], "Auto Interface": [[4, "auto-interface"]], "I2P Interface": [[4, "i2p-interface"]], "TCP Server Interface": [[4, "tcp-server-interface"]], "TCP Client Interface": [[4, "tcp-client-interface"]], "UDP Interface": [[4, "udp-interface"]], "RNode LoRa Interface": [[4, "rnode-lora-interface"]], "Serial Interface": [[4, "serial-interface"]], "Pipe Interface": [[4, "pipe-interface"]], "KISS Interface": [[4, "kiss-interface"]], "AX.25 KISS Interface": [[4, "ax-25-kiss-interface"]], "Common Interface Options": [[4, "common-interface-options"]], "Interface Modes": [[4, "interface-modes"]], "Announce Rate Control": [[4, "announce-rate-control"]], "Building Networks": [[5, "building-networks"]], "Concepts & Overview": [[5, "concepts-overview"]], "Example Scenarios": [[5, "example-scenarios"]], "Interconnected LoRa Sites": [[5, "interconnected-lora-sites"]], "Bridging Over the Internet": [[5, "bridging-over-the-internet"]], "Growth and Convergence": [[5, "growth-and-convergence"]], "API Reference": [[6, "api-reference"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "Understanding Reticulum": [[8, "understanding-reticulum"]], "Motivation": [[8, "motivation"]], "Goals": [[8, "goals"]], "Introduction & Basic Functionality": [[8, "introduction-basic-functionality"]], "Destinations": [[8, "destinations"]], "Destination Naming": [[8, "destination-naming"]], "Public Key Announcements": [[8, "public-key-announcements"]], "Identities": [[8, "understanding-identities"]], "Getting Further": [[8, "getting-further"]], "Reticulum Transport": [[8, "reticulum-transport"]], "Node Types": [[8, "node-types"]], "The Announce Mechanism in Detail": [[8, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[8, "reaching-the-destination"]], "Link Establishment in Detail": [[8, "link-establishment-in-detail"]], "Resources": [[8, "resources"]], "Reference Setup": [[8, "reference-setup"]], "Protocol Specifics": [[8, "protocol-specifics"]], "Packet Prioritisation": [[8, "packet-prioritisation"]], "Interface Access Codes": [[8, "interface-access-codes"]], "Wire Format": [[8, "wire-format"]], "Announce Propagation Rules": [[8, "announce-propagation-rules"]], "Cryptographic Primitives": [[8, "cryptographic-primitives"]], "Using Reticulum on Your System": [[9, "using-reticulum-on-your-system"]], "Configuration & Data": [[9, "configuration-data"]], "Included Utility Programs": [[9, "included-utility-programs"]], "The rnsd Utility": [[9, "the-rnsd-utility"]], "The rnstatus Utility": [[9, "the-rnstatus-utility"]], "The rnpath Utility": [[9, "the-rnpath-utility"]], "The rnprobe Utility": [[9, "the-rnprobe-utility"]], "The rncp Utility": [[9, "the-rncp-utility"]], "The rnx Utility": [[9, "the-rnx-utility"]], "Improving System Configuration": [[9, "improving-system-configuration"]], "Fixed Serial Port Names": [[9, "fixed-serial-port-names"]], "Reticulum as a System Service": [[9, "reticulum-as-a-system-service"]], "What is Reticulum?": [[10, "what-is-reticulum"]], "Current Status": [[10, "current-status"]], "What does Reticulum Offer?": [[10, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[10, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[10, "interface-types-and-devices"]], "Caveat Emptor": [[10, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[6, "RNS.Reticulum.ANNOUNCE_CAP"]], "curve (rns.identity attribute)": [[6, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[6, "RNS.Link.CURVE"]], "destination (class in rns)": [[6, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[6, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[6, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[6, "RNS.Identity"]], "keepalive (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[6, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[6, "RNS.Link"]], "mtu (rns.reticulum attribute)": [[6, "RNS.Reticulum.MTU"]], "pathfinder_m (rns.transport attribute)": [[6, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[6, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[6, "RNS.Packet"]], "packetreceipt (class in rns)": [[6, "RNS.PacketReceipt"]], "requestreceipt (class in rns)": [[6, "RNS.RequestReceipt"]], "resource (class in rns)": [[6, "RNS.Resource"]], "reticulum (class in rns)": [[6, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[6, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[6, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[6, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[6, "RNS.Transport"]], "accepts_links() (rns.destination method)": [[6, "RNS.Destination.accepts_links"]], "advertise() (rns.resource method)": [[6, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[6, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[6, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[6, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[6, "RNS.Destination.clear_default_app_data"]], "create_keys() (rns.destination method)": [[6, "RNS.Destination.create_keys"]], "decrypt() (rns.destination method)": [[6, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[6, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[6, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[6, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[6, "RNS.Identity.encrypt"]], "from_bytes() (rns.identity static method)": [[6, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[6, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[6, "RNS.Identity.full_hash"]], "full_name() (rns.destination static method)": [[6, "RNS.Destination.full_name"]], "get_data_size() (rns.resource method)": [[6, "RNS.Resource.get_data_size"]], "get_hash() (rns.resource method)": [[6, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[6, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[6, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[6, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[6, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[6, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[6, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[6, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[6, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[6, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[6, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[6, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[6, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[6, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[6, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[6, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[6, "RNS.Resource.is_compressed"]], "load_private_key() (rns.destination method)": [[6, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[6, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[6, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[6, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[6, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[6, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[6, "RNS.Link.no_outbound_for"]], "recall() (rns.identity static method)": [[6, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[6, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.register_announce_handler"]], "register_request_handler() (rns.destination method)": [[6, "RNS.Destination.register_request_handler"]], "request() (rns.link method)": [[6, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[6, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[6, "RNS.Packet.resend"]], "send() (rns.packet method)": [[6, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[6, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[6, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[6, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[6, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[6, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[6, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[6, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[6, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[6, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[6, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[6, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[6, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[6, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[6, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[6, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[6, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[6, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[6, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[6, "RNS.Identity.truncated_hash"]], "validate() (rns.identity method)": [[6, "RNS.Identity.validate"]]}})
\ No newline at end of file
diff --git a/docs/manual/support.html b/docs/manual/support.html
index 0b1e6d9b..7c605f18 100644
--- a/docs/manual/support.html
+++ b/docs/manual/support.html
@@ -1,51 +1,232 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="API Reference" href="reference.html" /><link rel="prev" title="Code Examples" href="examples.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Support Reticulum - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Support Reticulum — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="prev" title="API Reference" href="reference.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="reference.html" title="API Reference"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Support Reticulum</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="support-reticulum">
-<span id="support-main"></span><h1>Support Reticulum<a class="headerlink" href="#support-reticulum" title="Permalink to this heading">ΒΆ</a></h1>
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="support-reticulum">
+<span id="support-main"></span><h1>Support Reticulum<a class="headerlink" href="#support-reticulum" title="Permalink to this heading">#</a></h1>
<p>You can help support the continued development of open, free and private communications
systems by donating, providing feedback and contributing code and learning resources.</p>
<section id="donations">
-<h2>Donations<a class="headerlink" href="#donations" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Donations<a class="headerlink" href="#donations" title="Permalink to this heading">#</a></h2>
<p>Donations are gratefully accepted via the following channels:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Monero:
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
@@ -64,7 +245,7 @@ https://ko-fi.com/markqvist
organisation? Make them a reality quickly by sponsoring their implementation.</p>
</section>
<section id="provide-feedback">
-<h2>Provide Feedback<a class="headerlink" href="#provide-feedback" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Provide Feedback<a class="headerlink" href="#provide-feedback" title="Permalink to this heading">#</a></h2>
<p>All feedback on the usage, functioning and potential dysfunctioning of any and
all components of the system is very valuable to the continued development and
improvement of Reticulum. Absolutely no automated analytics, telemetry, error
@@ -72,22 +253,68 @@ reporting or statistics is collected and reported by Reticulum under any
circumstances, so we rely on old-fashioned human feedback.</p>
</section>
<section id="contribute-code">
-<h2>Contribute Code<a class="headerlink" href="#contribute-code" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Contribute Code<a class="headerlink" href="#contribute-code" title="Permalink to this heading">#</a></h2>
<p>Join us on <a class="reference external" href="https://github.com/markqvist/reticulum">the GitHub repository</a> to
report issues, suggest functionality and contribute code to Reticulum.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="reference.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">API Reference</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="examples.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Code Examples</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Support Reticulum</a><ul>
<li><a class="reference internal" href="#donations">Donations</a></li>
<li><a class="reference internal" href="#provide-feedback">Provide Feedback</a></li>
@@ -96,49 +323,21 @@ report issues, suggest functionality and contribute code to Reticulum.</p>
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="reference.html"
- title="previous chapter">API Reference</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/support.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="reference.html" title="API Reference"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Support Reticulum</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html
index 114c2ea2..1782eddc 100644
--- a/docs/manual/understanding.html
+++ b/docs/manual/understanding.html
@@ -1,51 +1,228 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Communications Hardware" href="hardware.html" /><link rel="prev" title="Using Reticulum on Your System" href="using.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Understanding Reticulum - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Understanding Reticulum — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Communications Hardware" href="hardware.html" />
- <link rel="prev" title="Using Reticulum on Your System" href="using.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="hardware.html" title="Communications Hardware"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="using.html" title="Using Reticulum on Your System"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Understanding Reticulum</a></li>
- </ul>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="understanding-reticulum">
-<span id="understanding-main"></span><h1>Understanding Reticulum<a class="headerlink" href="#understanding-reticulum" title="Permalink to this heading">ΒΆ</a></h1>
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="understanding-reticulum">
+<span id="understanding-main"></span><h1>Understanding Reticulum<a class="headerlink" href="#understanding-reticulum" title="Permalink to this heading">#</a></h1>
<p>This chapter will briefly describe the overall purpose and operating principles of Reticulum.
It should give you an overview of how the stack works, and an understanding of how to
develop networked applications using Reticulum.</p>
@@ -60,7 +237,7 @@ development, this is also the place to start, since it will provide a pretty cle
sentiments and the philosophy behind Reticulum, what problems it seeks to solve, and how it
approaches those solutions.</p>
<section id="motivation">
-<span id="understanding-motivation"></span><h2>Motivation<a class="headerlink" href="#motivation" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="understanding-motivation"></span><h2>Motivation<a class="headerlink" href="#motivation" title="Permalink to this heading">#</a></h2>
<p>The primary motivation for designing and implementing Reticulum has been the current lack of
reliable, functional and secure minimal-infrastructure modes of digital communication. It is my
belief that it is highly desirable to create a reliable and efficient way to set up long-range digital
@@ -88,7 +265,7 @@ kill-switches, surveillance, censorship and control. Networks that can freely in
with each other, and require no central oversight. Networks for human beings. <em>Networks for the people</em>.</p>
</section>
<section id="goals">
-<span id="understanding-goals"></span><h2>Goals<a class="headerlink" href="#goals" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="understanding-goals"></span><h2>Goals<a class="headerlink" href="#goals" title="Permalink to this heading">#</a></h2>
<p>To be as widely usable and efficient to deploy as possible, the following goals have been used to
guide the design of Reticulum:</p>
<ul class="simple">
@@ -159,7 +336,7 @@ needs to be purchased.</p>
</ul>
</section>
<section id="introduction-basic-functionality">
-<span id="understanding-basicfunctionality"></span><h2>Introduction & Basic Functionality<a class="headerlink" href="#introduction-basic-functionality" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="understanding-basicfunctionality"></span><h2>Introduction & Basic Functionality<a class="headerlink" href="#introduction-basic-functionality" title="Permalink to this heading">#</a></h2>
<p>Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at itβs
core a <em>message oriented</em> system. It is suited for both local point-to-point or point-to-multipoint
scenarios where all nodes are within range of each other, as well as scenarios where packets need
@@ -193,7 +370,7 @@ unencrypted packets for local broadcast purposes.</p>
and offers the possibility to easily tunnel Reticulum traffic over IP links such as the Internet or
private IP networks.</p>
<section id="destinations">
-<span id="understanding-destinations"></span><h3>Destinations<a class="headerlink" href="#destinations" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-destinations"></span><h3>Destinations<a class="headerlink" href="#destinations" title="Permalink to this heading">#</a></h3>
<p>To receive and send data with the Reticulum stack, an application needs to create one or more
destinations. Reticulum uses three different basic destination types, and one special:</p>
<ul class="simple">
@@ -236,7 +413,7 @@ out requests and responses, large data transfers and more.</p>
</li>
</ul>
<section id="destination-naming">
-<span id="understanding-destinationnaming"></span><h4>Destination Naming<a class="headerlink" href="#destination-naming" title="Permalink to this heading">ΒΆ</a></h4>
+<span id="understanding-destinationnaming"></span><h4>Destination Naming<a class="headerlink" href="#destination-naming" title="Permalink to this heading">#</a></h4>
<p>Destinations are created and named in an easy to understand dotted notation of <em>aspects</em>, and
represented on the network as a hash of this value. The hash is a SHA-256 truncated to 128 bits. The
top level aspect should always be a unique identifier for the application using the destination.
@@ -303,7 +480,7 @@ if there is not a very good reason for doing it differently.</p>
</section>
</section>
<section id="public-key-announcements">
-<span id="understanding-keyannouncements"></span><h3>Public Key Announcements<a class="headerlink" href="#public-key-announcements" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-keyannouncements"></span><h3>Public Key Announcements<a class="headerlink" href="#public-key-announcements" title="Permalink to this heading">#</a></h3>
<p>An <em>announce</em> will send a special packet over any relevant interfaces, containing all needed
information about the destination hash and public key, and can also contain some additional,
application specific data. The entire packet is signed by the sender to ensure authenticity. It is not
@@ -337,7 +514,7 @@ networks it is part of. After a short while, it will be globally reachable in th
<p>Seeing how <em>single</em> destinations are always tied to a private/public key pair leads us to the next topic.</p>
</section>
<section id="understanding-identities">
-<span id="identities"></span><h3>Identities<a class="headerlink" href="#understanding-identities" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="identities"></span><h3>Identities<a class="headerlink" href="#understanding-identities" title="Permalink to this heading">#</a></h3>
<p>In Reticulum, an <em>identity</em> does not necessarily represent a personal identity, but is an abstraction that
can represent any kind of <em>verifiable entity</em>. This could very well be a person, but it could also be the
control interface of a machine, a program, robot, computer, sensor or something else entirely. In
@@ -355,7 +532,7 @@ Reticulum Identity securely and privately, since obtaining access to the identit
obtaining access and controlling reachability to any destinations created by that identity.</p>
</section>
<section id="getting-further">
-<span id="understanding-gettingfurther"></span><h3>Getting Further<a class="headerlink" href="#getting-further" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-gettingfurther"></span><h3>Getting Further<a class="headerlink" href="#getting-further" title="Permalink to this heading">#</a></h3>
<p>The above functions and principles form the core of Reticulum, and would suffice to create
functional networked applications in local clusters, for example over radio links where all interested
nodes can directly hear each other. But to be truly useful, we need a way to direct traffic over multiple
@@ -364,7 +541,7 @@ hops in the network.</p>
</section>
</section>
<section id="reticulum-transport">
-<span id="understanding-transport"></span><h2>Reticulum Transport<a class="headerlink" href="#reticulum-transport" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="understanding-transport"></span><h2>Reticulum Transport<a class="headerlink" href="#reticulum-transport" title="Permalink to this heading">#</a></h2>
<p>The methods of routing used in traditional networks are fundamentally incompatible with the physical medium
types and circumstances that Reticulum was designed to handle. These mechanisms mostly assume trust at the physical layer,
and often needs a lot more bandwidth than Reticulum can assume is available. Since Reticulum is designed to
@@ -375,7 +552,7 @@ destination. It is important to note that no single node in a Reticulum network
path to a destination. Every Transport node participating in a Reticulum network will only
know the most direct way to get a packet one hop closer to itβs destination.</p>
<section id="node-types">
-<span id="understanding-nodetypes"></span><h3>Node Types<a class="headerlink" href="#node-types" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-nodetypes"></span><h3>Node Types<a class="headerlink" href="#node-types" title="Permalink to this heading">#</a></h3>
<p>Currently, Reticulum distinguishes between two types of network nodes. All nodes on a Reticulum network
are <em>Reticulum Instances</em>, and some are also <em>Transport Nodes</em>. If a system running Reticulum is fixed in
one place, and is intended to be kept available most of the time, it is a good contender to be a <em>Transport Node</em>.</p>
@@ -387,7 +564,7 @@ is the default setting.</p>
<p>If it is a <em>Transport Node</em>, it should be given the configuration directive <code class="docutils literal notranslate"><span class="pre">enable_transport</span> <span class="pre">=</span> <span class="pre">Yes</span></code>.</p>
</section>
<section id="the-announce-mechanism-in-detail">
-<span id="understanding-announce"></span><h3>The Announce Mechanism in Detail<a class="headerlink" href="#the-announce-mechanism-in-detail" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-announce"></span><h3>The Announce Mechanism in Detail<a class="headerlink" href="#the-announce-mechanism-in-detail" title="Permalink to this heading">#</a></h3>
<p>When an <em>announce</em> for a destination is transmitted by from a Reticulum instance, it will be forwarded by
any transport node receiving it, but according to some specific rules:</p>
<ul>
@@ -452,7 +629,7 @@ end-to-end connectivity in about one minute, given there is enough bandwidth ava
the required amount of announces.</p>
</section>
<section id="reaching-the-destination">
-<span id="understanding-paths"></span><h3>Reaching the Destination<a class="headerlink" href="#reaching-the-destination" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-paths"></span><h3>Reaching the Destination<a class="headerlink" href="#reaching-the-destination" title="Permalink to this heading">#</a></h3>
<p>In networks with changing topology and trustless connectivity, nodes need a way to establish
<em>verified connectivity</em> with each other. Since the network is assumed to be trustless, Reticulum
must provide a way to guarantee that the peer you are communicating with is actually who you
@@ -559,7 +736,7 @@ by referring to this <em>link id</em>.</p>
a link open is practically negligible, at 0.45 bits per second. Even on a slow 1200 bits per second packet
radio channel, 100 concurrent links will still leave 96% channel capacity for actual data.</p>
<section id="link-establishment-in-detail">
-<h4>Link Establishment in Detail<a class="headerlink" href="#link-establishment-in-detail" title="Permalink to this heading">ΒΆ</a></h4>
+<h4>Link Establishment in Detail<a class="headerlink" href="#link-establishment-in-detail" title="Permalink to this heading">#</a></h4>
<p>After exploring the basics of the announce mechanism, finding a path through the network, and an overview
of the link establishment procedure, this section will go into greater detail about the Reticulum link
establishment process.</p>
@@ -634,7 +811,7 @@ automate retransmissions if <em>Resources</em> are used.</p>
</section>
</section>
<section id="resources">
-<span id="understanding-resources"></span><h3>Resources<a class="headerlink" href="#resources" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-resources"></span><h3>Resources<a class="headerlink" href="#resources" title="Permalink to this heading">#</a></h3>
<p>For exchanging small amounts of data over a Reticulum network, the <a class="reference internal" href="reference.html#api-packet"><span class="std std-ref">Packet</span></a> interface
is sufficient, but for exchanging data that would require many packets, an efficient way to coordinate
the transfer is needed.</p>
@@ -648,7 +825,7 @@ or stream data directly from files.</p>
</section>
</section>
<section id="reference-setup">
-<span id="understanding-referencesystem"></span><h2>Reference Setup<a class="headerlink" href="#reference-setup" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="understanding-referencesystem"></span><h2>Reference Setup<a class="headerlink" href="#reference-setup" title="Permalink to this heading">#</a></h2>
<p>This section will detail a recommended <em>Reference Setup</em> for Reticulum. It is important to
note that Reticulum is designed to be usable on more or less any computing device, and over more
or less any medium that allows you to send and receive data, which satisfies some very low
@@ -716,18 +893,18 @@ even if you have none of the hardware already, and need to purchase everything.<
tailor it to your own specific needs, or whatever hardware you have available.</p>
</section>
<section id="protocol-specifics">
-<span id="understanding-protocolspecifics"></span><h2>Protocol Specifics<a class="headerlink" href="#protocol-specifics" title="Permalink to this heading">ΒΆ</a></h2>
+<span id="understanding-protocolspecifics"></span><h2>Protocol Specifics<a class="headerlink" href="#protocol-specifics" title="Permalink to this heading">#</a></h2>
<p>This chapter will detail protocol specific information that is essential to the implementation of
Reticulum, but non critical in understanding how the protocol works on a general level. It should be
treated more as a reference than as essential reading.</p>
<section id="packet-prioritisation">
-<h3>Packet Prioritisation<a class="headerlink" href="#packet-prioritisation" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Packet Prioritisation<a class="headerlink" href="#packet-prioritisation" title="Permalink to this heading">#</a></h3>
<p>Currently, Reticulum is completely priority-agnostic regarding general traffic. All traffic is handled
on a first-come, first-serve basis. Announce re-transmission are handled according to the re-transmission
times and priorities described earlier in this chapter.</p>
</section>
<section id="interface-access-codes">
-<h3>Interface Access Codes<a class="headerlink" href="#interface-access-codes" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Interface Access Codes<a class="headerlink" href="#interface-access-codes" title="Permalink to this heading">#</a></h3>
<p>Reticulum can create named virtual networks, and networks that are only accessible by knowing a preshared
passphrase. The configuration of this is detailed in the <a class="reference internal" href="interfaces.html#interfaces-options"><span class="std std-ref">Common Interface Options</span></a>
section. To implement these feature, Reticulum uses the concept of Interface Access Codes, that are calculated
@@ -742,7 +919,7 @@ does not. This ensures that only packets sent with the correct naming and/or pas
pass onto the network.</p>
</section>
<section id="wire-format">
-<span id="understanding-packetformat"></span><h3>Wire Format<a class="headerlink" href="#wire-format" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-packetformat"></span><h3>Wire Format<a class="headerlink" href="#wire-format" title="Permalink to this heading">#</a></h3>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>== Reticulum Wire Format ======
A Reticulum packet is composed of the following fields:
@@ -869,7 +1046,7 @@ but excluding any interface access codes.
</div>
</section>
<section id="announce-propagation-rules">
-<span id="understanding-announcepropagation"></span><h3>Announce Propagation Rules<a class="headerlink" href="#announce-propagation-rules" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-announcepropagation"></span><h3>Announce Propagation Rules<a class="headerlink" href="#announce-propagation-rules" title="Permalink to this heading">#</a></h3>
<p>The following table illustrates the rules for automatically propagating announces
from one interface type to another, for all possible combinations. For the purpose
of announce propagation, the <em>Full</em> and <em>Gateway</em> modes are identical.</p>
@@ -878,7 +1055,7 @@ of announce propagation, the <em>Full</em> and <em>Gateway</em> modes are identi
of the different interface modes, and how they are configured.</p>
</section>
<section id="cryptographic-primitives">
-<span id="understanding-primitives"></span><h3>Cryptographic Primitives<a class="headerlink" href="#cryptographic-primitives" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="understanding-primitives"></span><h3>Cryptographic Primitives<a class="headerlink" href="#cryptographic-primitives" title="Permalink to this heading">#</a></h3>
<p>Reticulum has been designed to use a simple suite of efficient, strong and modern
cryptographic primitives, with widely available implementations that can be used
both on general-purpose CPUs and on microcontrollers. The necessary primitives are:</p>
@@ -920,16 +1097,62 @@ those risks are acceptable to you.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="hardware.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Communications Hardware</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="using.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Using Reticulum on Your System</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Understanding Reticulum</a><ul>
<li><a class="reference internal" href="#motivation">Motivation</a></li>
<li><a class="reference internal" href="#goals">Goals</a></li>
@@ -966,57 +1189,21 @@ those risks are acceptable to you.</p>
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="using.html"
- title="previous chapter">Using Reticulum on Your System</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="hardware.html"
- title="next chapter">Communications Hardware</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/understanding.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="hardware.html" title="Communications Hardware"
- >next</a> |</li>
- <li class="right" >
- <a href="using.html" title="Using Reticulum on Your System"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Understanding Reticulum</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/using.html b/docs/manual/using.html
index 8fd94f8a..7a038605 100644
--- a/docs/manual/using.html
+++ b/docs/manual/using.html
@@ -1,51 +1,228 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Understanding Reticulum" href="understanding.html" /><link rel="prev" title="Getting Started Fast" href="gettingstartedfast.html" />
+
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>Using Reticulum on Your System - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<!DOCTYPE html>
-
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>Using Reticulum on Your System — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Understanding Reticulum" href="understanding.html" />
- <link rel="prev" title="Getting Started Fast" href="gettingstartedfast.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="understanding.html" title="Understanding Reticulum"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="gettingstartedfast.html" title="Getting Started Fast"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Using Reticulum on Your System</a></li>
- </ul>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="using-reticulum-on-your-system">
-<span id="using-main"></span><h1>Using Reticulum on Your System<a class="headerlink" href="#using-reticulum-on-your-system" title="Permalink to this heading">ΒΆ</a></h1>
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="using-reticulum-on-your-system">
+<span id="using-main"></span><h1>Using Reticulum on Your System<a class="headerlink" href="#using-reticulum-on-your-system" title="Permalink to this heading">#</a></h1>
<p>Reticulum is not installed as a driver or kernel module, as one might expect
of a networking stack. Instead, Reticulum is distributed as a Python module.
This means that no special privileges are required to install or use it. It
@@ -60,7 +237,7 @@ instance is simply shared. This works for any number of programs running
concurrently, and is very easy to use, but depending on your use case, there
are other options.</p>
<section id="configuration-data">
-<h2>Configuration & Data<a class="headerlink" href="#configuration-data" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Configuration & Data<a class="headerlink" href="#configuration-data" title="Permalink to this heading">#</a></h2>
<p>A Reticulum stores all information that it needs to function in a single file-
system directory. By default, this directory is <code class="docutils literal notranslate"><span class="pre">~/.config/reticulum</span></code>, but you can
use any directory you wish. You can also run multiple separate Reticulum
@@ -171,7 +348,7 @@ concepts you need to understand to configure your network. Once you have done th
take a look at the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapter of this manual.</p>
</section>
<section id="included-utility-programs">
-<h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Permalink to this heading">#</a></h2>
<p>Reticulum includes a range of useful utilities, both for managing your Reticulum
networks, and for carrying out common tasks over Reticulum networks, such as
transferring files to remote systems, and executing commands and programs remotely.</p>
@@ -180,7 +357,7 @@ Reticulum to stay available all the time, for example if you are hosting
a transport node, you might want to run Reticulum as a separate service that
other programs, applications and services can utilise.</p>
<section id="the-rnsd-utility">
-<h3>The rnsd Utility<a class="headerlink" href="#the-rnsd-utility" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>The rnsd Utility<a class="headerlink" href="#the-rnsd-utility" title="Permalink to this heading">#</a></h3>
<p>It is very easy to run Reticulum as a service. Simply run the included <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> command.
When <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> is running, it will keep all configured interfaces open, handle transport if
it is enabled, and allow any other programs to immediately utilise the
@@ -209,7 +386,7 @@ optional arguments:
<p>You can easily add <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as an always-on service by <a class="reference internal" href="#using-systemd"><span class="std std-ref">configuring a service</span></a>.</p>
</section>
<section id="the-rnstatus-utility">
-<h3>The rnstatus Utility<a class="headerlink" href="#the-rnstatus-utility" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>The rnstatus Utility<a class="headerlink" href="#the-rnstatus-utility" title="Permalink to this heading">#</a></h3>
<p>Using the <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> utility, you can view the status of configured Reticulum
interfaces, similar to the <code class="docutils literal notranslate"><span class="pre">ifconfig</span></code> program.</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span># Run rnstatus
@@ -263,7 +440,7 @@ optional arguments:
</div>
</section>
<section id="the-rnpath-utility">
-<h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Permalink to this heading">#</a></h3>
<p>With the <code class="docutils literal notranslate"><span class="pre">rnpath</span></code> utility, you can look up and view paths for
destinations on the Reticulum network.</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span># Run rnpath
@@ -294,7 +471,7 @@ optional arguments:
</div>
</section>
<section id="the-rnprobe-utility">
-<h3>The rnprobe Utility<a class="headerlink" href="#the-rnprobe-utility" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>The rnprobe Utility<a class="headerlink" href="#the-rnprobe-utility" title="Permalink to this heading">#</a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rnprobe</span></code> utility lets you probe a destination for connectivity, similar
to the <code class="docutils literal notranslate"><span class="pre">ping</span></code> program. Please note that probes will only be answered if the
specified destination is configured to send proofs for received packets. Many
@@ -325,7 +502,7 @@ optional arguments:
</div>
</section>
<section id="the-rncp-utility">
-<h3>The rncp Utility<a class="headerlink" href="#the-rncp-utility" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>The rncp Utility<a class="headerlink" href="#the-rncp-utility" title="Permalink to this heading">#</a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rncp</span></code> utility is a simple file transfer tool. Using it, you can transfer
files through Reticulum.</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span># Run rncp on the receiving system, specifying which identities
@@ -362,7 +539,7 @@ optional arguments:
</div>
</section>
<section id="the-rnx-utility">
-<h3>The rnx Utility<a class="headerlink" href="#the-rnx-utility" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>The rnx Utility<a class="headerlink" href="#the-rnx-utility" title="Permalink to this heading">#</a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rnx</span></code> utility is a basic remote command execution program. It allows you to
execute commands on remote systems over Reticulum, and to view returned command
output.</p>
@@ -419,12 +596,12 @@ optional arguments:
</section>
</section>
<section id="improving-system-configuration">
-<h2>Improving System Configuration<a class="headerlink" href="#improving-system-configuration" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Improving System Configuration<a class="headerlink" href="#improving-system-configuration" title="Permalink to this heading">#</a></h2>
<p>If you are setting up a system for permanent use with Reticulum, there is a
few system configuration changes that can make this easier to administrate.
These changes will be detailed here.</p>
<section id="fixed-serial-port-names">
-<h3>Fixed Serial Port Names<a class="headerlink" href="#fixed-serial-port-names" title="Permalink to this heading">ΒΆ</a></h3>
+<h3>Fixed Serial Port Names<a class="headerlink" href="#fixed-serial-port-names" title="Permalink to this heading">#</a></h3>
<p>On a Reticulum instance with several serial port based interfaces, it can be
beneficial to use the fixed device names for the serial ports, instead
of the dynamically allocated shorthands such as <code class="docutils literal notranslate"><span class="pre">/dev/ttyUSB0</span></code>. Under most
@@ -452,7 +629,7 @@ might be plugged and unplugged in different orders, or when device name
assignment varies from one boot to another.</p>
</section>
<section id="reticulum-as-a-system-service">
-<span id="using-systemd"></span><h3>Reticulum as a System Service<a class="headerlink" href="#reticulum-as-a-system-service" title="Permalink to this heading">ΒΆ</a></h3>
+<span id="using-systemd"></span><h3>Reticulum as a System Service<a class="headerlink" href="#reticulum-as-a-system-service" title="Permalink to this heading">#</a></h3>
<p>Instead of starting Reticulum manually, you can install <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as a system
service and have it start automatically at boot.</p>
<p>If you installed Reticulum with <code class="docutils literal notranslate"><span class="pre">pip</span></code>, the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program will most likely
@@ -498,16 +675,62 @@ WantedBy=multi-user.target
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="understanding.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Understanding Reticulum</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="gettingstartedfast.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Getting Started Fast</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">Using Reticulum on Your System</a><ul>
<li><a class="reference internal" href="#configuration-data">Configuration & Data</a></li>
<li><a class="reference internal" href="#included-utility-programs">Included Utility Programs</a><ul>
@@ -528,57 +751,21 @@ WantedBy=multi-user.target
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="gettingstartedfast.html"
- title="previous chapter">Getting Started Fast</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="understanding.html"
- title="next chapter">Understanding Reticulum</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/using.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="understanding.html" title="Understanding Reticulum"
- >next</a> |</li>
- <li class="right" >
- <a href="gettingstartedfast.html" title="Getting Started Fast"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">Using Reticulum on Your System</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html
index 83ce1dae..48830c79 100644
--- a/docs/manual/whatis.html
+++ b/docs/manual/whatis.html
@@ -1,51 +1,228 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head><meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Getting Started Fast" href="gettingstartedfast.html" /><link rel="prev" title="Reticulum Network Stack Manual" href="index.html" />
-<!DOCTYPE html>
+ <meta name="generator" content="sphinx-5.2.2, furo 2022.09.29"/>
+ <title>What is Reticulum? - Reticulum Network Stack 0.3.12 beta documentation</title>
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
+ <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
+ <link rel="stylesheet" type="text/css" href="_static/custom.css" />
+
+
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
- <title>What is Reticulum? — Reticulum Network Stack 0.3.12 beta documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+<style>
+ body {
+ --color-code-background: #f8f8f8;
+ --color-code-foreground: black;
+
+ }
+ @media not print {
+ body[data-theme="dark"] {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ @media (prefers-color-scheme: dark) {
+ body:not([data-theme="light"]) {
+ --color-code-background: #202020;
+ --color-code-foreground: #d0d0d0;
+ --color-background-primary: #202b38;
+ --color-background-secondary: #161f27;
+ --color-foreground-primary: #dbdbdb;
+ --color-foreground-secondary: #a9b1ba;
+ --color-brand-primary: #41adff;
+ --color-background-hover: #161f27;
+ --color-api-name: #ffbe85;
+ --color-api-pre-name: #efae75;
+
+ }
+ }
+ }
+</style></head>
+ <body>
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
- <script src="_static/doctools.js"></script>
- <script src="_static/sphinx_highlight.js"></script>
+ <script>
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+ </script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Getting Started Fast" href="gettingstartedfast.html" />
- <link rel="prev" title="Reticulum Network Stack Manual" href="index.html" />
- </head><body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="gettingstartedfast.html" title="Getting Started Fast"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Reticulum Network Stack Manual"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">What is Reticulum?</a></li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <section id="what-is-reticulum">
-<h1>What is Reticulum?<a class="headerlink" href="#what-is-reticulum" title="Permalink to this heading">ΒΆ</a></h1>
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="svg-toc" viewBox="0 0 24 24">
+ <title>Contents</title>
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
+ </svg>
+ </symbol>
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line>
+ <line x1="3" y1="6" x2="21" y2="6"></line>
+ <line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+ </symbol>
+ <symbol id="svg-sun" viewBox="0 0 24 24">
+ <title>Light mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
+ <circle cx="12" cy="12" r="5"></circle>
+ <line x1="12" y1="1" x2="12" y2="3"></line>
+ <line x1="12" y1="21" x2="12" y2="23"></line>
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
+ <line x1="1" y1="12" x2="3" y2="12"></line>
+ <line x1="21" y1="12" x2="23" y2="12"></line>
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
+ </svg>
+ </symbol>
+ <symbol id="svg-moon" viewBox="0 0 24 24">
+ <title>Dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
+ </svg>
+ </symbol>
+ <symbol id="svg-sun-half" viewBox="0 0 24 24">
+ <title>Auto light/dark mode</title>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
+ stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <circle cx="12" cy="12" r="9" />
+ <path d="M13 12h5" />
+ <path d="M13 15h4" />
+ <path d="M13 18h1" />
+ <path d="M13 9h4" />
+ <path d="M13 6h1" />
+ </svg>
+ </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+ <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+ <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+
+
+<div class="page">
+ <header class="mobile-header">
+ <div class="header-left">
+ <label class="nav-overlay-icon" for="__navigation">
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+ </label>
+ </div>
+ <div class="header-center">
+ <a href="index.html"><div class="brand">Reticulum Network Stack 0.3.12 beta documentation</div></a>
+ </div>
+ <div class="header-right">
+ <div class="theme-toggle-container theme-toggle-header">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ </header>
+ <aside class="sidebar-drawer">
+ <div class="sidebar-container">
+
+ <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
+
+ <div class="sidebar-logo-container">
+ <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
+ </div>
+
+ <span class="sidebar-brand-text">Reticulum Network Stack 0.3.12 beta documentation</span>
+
+</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
+ <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
+ <input type="hidden" name="check_keywords" value="yes">
+ <input type="hidden" name="area" value="default">
+</form>
+<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
+ <ul class="current">
+<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">What is Reticulum?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
+<li class="toctree-l1"><a class="reference internal" href="using.html">Using Reticulum on Your System</a></li>
+<li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
+<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Supported Interfaces</a></li>
+<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
+<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
+</ul>
+
+</div>
+</div>
+
+ </div>
+
+ </div>
+ </aside>
+ <div class="main">
+ <div class="content">
+ <div class="article-container">
+ <a href="#" class="back-to-top muted-link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+ </svg>
+ <span>Back to top</span>
+ </a>
+ <div class="content-icon-container">
+ <div class="theme-toggle-container theme-toggle-content">
+ <button class="theme-toggle">
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+ <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+ </button>
+ </div>
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+ </label>
+ </div>
+ <article role="main">
+ <section id="what-is-reticulum">
+<h1>What is Reticulum?<a class="headerlink" href="#what-is-reticulum" title="Permalink to this heading">#</a></h1>
<p>Reticulum is a cryptography-based networking stack for building wide-area
networks with readily available hardware, that can continue to operate even
with extremely low bandwidth and very high latency.</p>
@@ -63,14 +240,14 @@ networks.</p>
userland, and can run on practically any system that runs Python 3. Reticulum
runs well even on small single-board computers like the Pi Zero.</p>
<section id="current-status">
-<h2>Current Status<a class="headerlink" href="#current-status" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Current Status<a class="headerlink" href="#current-status" title="Permalink to this heading">#</a></h2>
<p>Reticulum should currently be considered beta software. All core protocol
features are implemented and functioning, but additions will probably occur as
real-world use is explored. There will be bugs. The API and wire-format can be
considered stable at the moment, but could change if absolutely warranted.</p>
</section>
<section id="what-does-reticulum-offer">
-<h2>What does Reticulum Offer?<a class="headerlink" href="#what-does-reticulum-offer" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>What does Reticulum Offer?<a class="headerlink" href="#what-does-reticulum-offer" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p>Coordination-less globally unique addressing and identification</p></li>
<li><p>Fully self-configuring multi-hop routing</p></li>
@@ -106,7 +283,7 @@ considered stable at the moment, but could change if absolutely warranted.</p>
</ul>
</section>
<section id="where-can-reticulum-be-used">
-<h2>Where can Reticulum be Used?<a class="headerlink" href="#where-can-reticulum-be-used" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Where can Reticulum be Used?<a class="headerlink" href="#where-can-reticulum-be-used" title="Permalink to this heading">#</a></h2>
<p>Over practically any medium that can support at least a half-duplex channel
with 500 bits per second throughput, and an MTU of 500 bytes. Data radios,
modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes,
@@ -128,7 +305,7 @@ network can communicate with nodes on the LoRa and packet radio sides of the
network, and vice versa.</p>
</section>
<section id="interface-types-and-devices">
-<h2>Interface Types and Devices<a class="headerlink" href="#interface-types-and-devices" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Interface Types and Devices<a class="headerlink" href="#interface-types-and-devices" title="Permalink to this heading">#</a></h2>
<p>Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, itβs relatively simple to implement an interface class. Currently, Reticulum can use the following devices and communication mediums:</p>
<ul class="simple">
<li><p>Any Ethernet device</p>
@@ -166,7 +343,7 @@ network, and vice versa.</p>
<p>For a full list and more details, see the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Supported Interfaces</span></a> chapter.</p>
</section>
<section id="caveat-emptor">
-<h2>Caveat Emptor<a class="headerlink" href="#caveat-emptor" title="Permalink to this heading">ΒΆ</a></h2>
+<h2>Caveat Emptor<a class="headerlink" href="#caveat-emptor" title="Permalink to this heading">#</a></h2>
<p>Reticulum is an experimental networking stack, and should be considered as
such. While it has been built with cryptography best-practices very foremost in
mind, it has not been externally security audited, and there could very well be
@@ -176,16 +353,62 @@ want to help out, or help sponsor an audit, please do get in touch.</p>
</section>
</section>
-
- <div class="clearer"></div>
+ </article>
+ </div>
+ <footer>
+
+ <div class="related-pages">
+ <a class="next-page" href="gettingstartedfast.html">
+ <div class="page-info">
+ <div class="context">
+ <span>Next</span>
+ </div>
+ <div class="title">Getting Started Fast</div>
+ </div>
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ </a>
+ <a class="prev-page" href="index.html">
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+ <div class="page-info">
+ <div class="context">
+ <span>Previous</span>
+ </div>
+
+ <div class="title">Home</div>
+
+ </div>
+ </a>
+ </div>
+ <div class="bottom-of-page">
+ <div class="left-details">
+ <div class="copyright">
+ Copyright © 2022, Mark Qvist
+ </div>
+ Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
+
+ </div>
+ <div class="right-details">
+ <div class="icons">
+
+ </div>
</div>
</div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="index.html">Table of Contents</a></h3>
- <ul>
+
+ </footer>
+ </div>
+ <aside class="toc-drawer">
+
+
+ <div class="toc-sticky toc-scroll">
+ <div class="toc-title-container">
+ <span class="toc-title">
+ On this page
+ </span>
+ </div>
+ <div class="toc-tree-container">
+ <div class="toc-tree">
+ <ul>
<li><a class="reference internal" href="#">What is Reticulum?</a><ul>
<li><a class="reference internal" href="#current-status">Current Status</a></li>
<li><a class="reference internal" href="#what-does-reticulum-offer">What does Reticulum Offer?</a></li>
@@ -196,57 +419,21 @@ want to help out, or help sponsor an audit, please do get in touch.</p>
</li>
</ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="index.html"
- title="previous chapter">Reticulum Network Stack Manual</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="gettingstartedfast.html"
- title="next chapter">Getting Started Fast</a></p>
- </div>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/whatis.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
- <div class="searchformwrapper">
- <form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
- <input type="submit" value="Go" />
- </form>
- </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+ </div>
</div>
</div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="gettingstartedfast.html" title="Getting Started Fast"
- >next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Reticulum Network Stack Manual"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Reticulum Network Stack 0.3.12 beta documentation</a> »</li>
- <li class="nav-item nav-item-this"><a href="">What is Reticulum?</a></li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2022, Mark Qvist.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.2.2.
- </div>
- </body>
+
+
+ </aside>
+ </div>
+</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script src="_static/sphinx_highlight.js"></script>
+ <script src="_static/scripts/furo.js"></script>
+ <script src="_static/clipboard.min.js"></script>
+ <script src="_static/copybutton.js"></script>
+ </body>
</html>
\ No newline at end of file
diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css
new file mode 100644
index 00000000..0abea7bb
--- /dev/null
+++ b/docs/source/_static/custom.css
@@ -0,0 +1,24 @@
+h3 {
+ margin-top: 1.75rem;
+ margin-bottom: 0.5rem;
+}
+
+code.literal {
+ padding-left: 0.25rem !important;
+ padding-right: 0.25rem !important;
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.15rem !important;
+}
+
+img[src*="if_mode_graph_b.png"] {
+ background-color: rgb(169, 177, 186);
+}
+
+dt.sig {
+ margin-bottom: 0.75rem;
+ margin-top: 1.75rem;
+}
+
+div.bottom-of-page div.left-details:not(:first-child) {
+ display: none !important;
+}
\ No newline at end of file
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 27f3abb3..09ce889d 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -1,9 +1,3 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# This file only contains a selection of the most common options. For a full
-# list see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
@@ -14,9 +8,7 @@ import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
-
# -- Project information -----------------------------------------------------
-
project = 'Reticulum Network Stack'
copyright = '2022, Mark Qvist'
author = 'Mark Qvist'
@@ -25,15 +17,10 @@ author = 'Mark Qvist'
import RNS
release = RNS._version.__version__+" beta"
-
# -- General configuration ---------------------------------------------------
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
extensions = [
"sphinx.ext.autodoc",
- #'sphinx.ext.autosectionlabel',
+ "sphinx_copybutton",
]
autodoc_member_order = "bysource"
@@ -52,17 +39,58 @@ exclude_patterns = []
# -- Options for HTML output -------------------------------------------------
+html_show_sphinx = True
+html_theme = "furo"
+html_logo = "graphics/rns_logo_512.png"
+html_theme_options = {
+ "top_of_page_button": None,
+ # "footer_icons": [
+ # {
+ # "name": "GitHub",
+ # "url": "https://github.com/markqvist/reticulum",
+ # "html": """
+ # <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
+ # <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
+ # </svg>
+ # """,
+ # "class": "",
+ # },
+ # ],
+ "dark_css_variables": {
+ "color-background-primary": "#202b38",
+ "color-background-secondary": "#161f27",
+ "color-foreground-primary": "#dbdbdb",
+ "color-foreground-secondary": "#a9b1ba",
+ "color-brand-primary": "#41adff",
+ "color-background-hover": "#161f27",
+ "color-api-name": "#ffbe85",
+ "color-api-pre-name": "#efae75",
+ },
+ # "announcement": "Announcement content",
+}
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-html_theme = "classic"
+html_static_path = ["_static"]
+html_css_files = [
+ 'custom.css',
+]
+# html_theme = "pydata_sphinx_theme"
+# html_theme_options = {
+# "navbar_start": ["navbar-logo"],
+# "navbar_center": ["navbar-nav"],
+# "navbar_end": ["navbar-icon-links"],
+# "navbar_align": "left",
+# "left_sidebar_end": [],
+# "show_nav_level": 5,
+# "navigation_depth": 5,
+# "collapse_navigation": True,
+# }
+# html_sidebars = {
+# "**": ["sidebar-nav-bs"]
+# }
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
-
# def check_skip_member(app, what, name, obj, skip, options):
# print(what, " | ", name, " | ", obj, " | ", skip, " | ", options)
diff --git a/docs/source/graphics/rns_logo_512.png b/docs/source/graphics/rns_logo_512.png
new file mode 100644
index 00000000..ba3940a7
Binary files /dev/null and b/docs/source/graphics/rns_logo_512.png differ
diff --git a/docs/source/index.rst b/docs/source/index.rst
index d61a548b..6ce79e25 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -5,6 +5,11 @@ This manual aims to provide you with all the information you need to
understand Reticulum, build networks or develop programs using it, or
to participate in the development of Reticulum itself.
+.. only:: html
+
+ Table Of Contents
+ =================
+
.. toctree::
:maxdepth: 3
@@ -16,9 +21,13 @@ to participate in the development of Reticulum itself.
interfaces
networks
examples
- reference
support
+.. toctree::
+ :maxdepth: 2
+
+ reference
+
.. only:: html
diff --git a/docs/source/reference.rst b/docs/source/reference.rst
index 27e6eff2..017cf8d2 100644
--- a/docs/source/reference.rst
+++ b/docs/source/reference.rst
@@ -5,11 +5,8 @@
*************
API Reference
*************
-This chapter lists and explains all classes exposed by the Reticulum Network Stack API, along with their methods and usage. It can be used as a reference while writing applications that utilise Reticulum, or read in entirity to gain an understanding of the complete functionality of RNS from a developers perspective.
-
-Classes
-=========================
-Communication over a Reticulum network is achieved using a set of classes exposed by the RNS API.
+Communication over Reticulum networks is achieved by using a simple set of classes exposed by the RNS API.
+This chapter lists and explains all classes exposed by the Reticulum Network Stack API, along with their method signatures and usage. It can be used as a reference while writing applications that utilise Reticulum, or it can be read in entirity to gain an understanding of the complete functionality of RNS from a developers perspective.
.. _api-reticulum:
Served by rngit 1.5.2 - Generated in 0.33s